我有一张这样的表:
id | t1 | t2
---------------
1 | a | b
2 | c | a
3 | a | e
4 | f | g
5 | c | c
Run Code Online (Sandbox Code Playgroud)
我想比较列t1并t2相互比较以删除匹配值并在每列中获取唯一值,如下所示:
t1 | t2
-----------
a | b
c | null
null | e
f | g
null| null
Run Code Online (Sandbox Code Playgroud)
选择哪一行显示值以及其他哪一行显示空值并不重要。例如,由于a在原始数据集的第 3 行中也找到了值,因此以下输出也将有效:
t1 | t2
-----------
null | b
c | null
a | e
f | g
null| null
Run Code Online (Sandbox Code Playgroud)
最终目标是在两列中显示所有不同的值并且没有相同的值。
我有一列包含数字:
Value
-----
123
452
021
111
...
Run Code Online (Sandbox Code Playgroud)
我想得到每个值的数字之和。
答案应该看起来像
Value SumValue
----- --------
123 6
452 11
021 3
111 3
... ...
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我试过这个:
select value
, case
when len(value) = 2 then convert(int, left(value, 1))
+ convert(int, right(value, 1))
when len(value) = 3 then convert(int, substring(convert(varchar(1), value), 1,1))
+ convert(int, substring(convert(varchar(1), value), 2,1))
+ convert(int, substring(convert(varchar(1), value), 3,1))
else value
end as SumNum
from get_number (000, 999);
Run Code Online (Sandbox Code Playgroud)
当我达到三位数时,它无法正确计算,在我看来必须有更好的解决方案。
我有一个如下所示的 SQL 代码:
declare @str nvarchar(max),@i int
set @i=0
set @str='abc '
declare @tbl Table(a nvarchar(max))
insert @tbl select @str
while (select a from @tbl)<>''
begin
set @i=@i+1
set @str = substring(@str,2,len(@str))
update @tbl set a=@str
select * from @tbl
end
Run Code Online (Sandbox Code Playgroud)
这里@str有值'abc '(末尾有空格)。执行上述查询时,当'a'. 此查询的输出还包括:
bc
c
<here blank>
Run Code Online (Sandbox Code Playgroud)
对于上面的查询,如果我给出输入@str,'abcd'
那么输出将是
bcd
cd
d
<here blank>
Run Code Online (Sandbox Code Playgroud)
所以在第一种情况下,@str='abc '我想得到像
bc
c
<here blank>
<here blank>
Run Code Online (Sandbox Code Playgroud)
现在代码正在检查空间,因此我遇到了问题。但我希望它也考虑到最后的空间。
同样是 SQL 中的问题len()。双方 …
我有一个视图,我在其中提取车辆的属性,例如轮胎尺寸、发动机容量、颜色、门数等。这些数据存储在多个表中,但我已将数据简化到我的视图中。
我想要实现的是将此视图加入我的主车辆表,以便我可以选择各种属性作为单行中的列。
我的看法:
Vehicle_ID Property Value
1 Doors 2
1 Engine Size 2 liter
1 Tire Size 50cm
1 Color Blue
2 Doors 4
2 Engine Size 3 liter
Run Code Online (Sandbox Code Playgroud)
还有我的主要车辆表:
Vehicle_ID Description Date_Bought Owner_ID
1 BMW M3 Sport 2000/12/23 1
2 Audi A5 3XL 2015/03/19 1
Run Code Online (Sandbox Code Playgroud)
所以我想出去的是
Vehicle ID Description Date_Bought Doors [Engine Size] [Tire Size] [Color]
1 BMW M3 Sport 2000/12/23 2 2 liter 50cm Blue
Run Code Online (Sandbox Code Playgroud)
我的整体 SQL 知识相当有限,我很擅长 JOINS 和其他东西,但是 PIVOT 命令的逻辑及其语法完全让我望而却步。
(我使用 sql server 2015)在我的订单表中,邮政编码是varchar.
我想做这样的搜索:
SELECT distinct email
FROM [dbo].[tb_Order]
where postalCode in (20004,20528,20260,20529,22060,22181,20708)
Run Code Online (Sandbox Code Playgroud)
(有更多邮政编码)
我不想将代码列表转换为("20004","20528","20708").
处理这个问题的最佳方法是什么?
我已经成功地在 SQL Server 中创建了一个 VIEW,如下所示。但是当我在 MySql 中尝试相同时,错误来了。
CREATE VIEW [dbo].[vw_PurchParent] as
WITH cte AS
(
SELECT a._Id, a._parentId, a._name, a._IsLedger
FROM tbl_ChartOfAcc a
WHERE _Id = 1
UNION ALL
SELECT a._Id, a._parentid, a._Name, a._IsLedger
FROM tbl_ChartOfAcc a JOIN cte c ON a._parentId = c._id
)
SELECT *
FROM cte where _IsLedger = 'Y'
GO
Run Code Online (Sandbox Code Playgroud)
MySQL 中的错误:
1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的 'cte AS( SELECT a._Id, a._parentId, a._name, ' 附近使用的正确语法
服务器版本:5.6.41 -84.1 - Percona …
这是我的ticks(时钟)表:
_id_
#employee_id
created_at
Run Code Online (Sandbox Code Playgroud)
该表为每个员工存储他们勾选的时间戳。有时他们中的一些人一天打好几次,有些人不上班时只打一次或根本不打。
我有一个查询,可以让我确切地知道员工在过去 7 天内不上班的次数,但我希望结果中包含他们不上班的天数。这意味着,每个员工在过去 7 天内工作少于 6 天,以及缺少哪些日期。我不知道。
以下是我如何查询过去 7 天内谁缺席了不止一次,以及缺席了多少次:
SELECT `id`, `employee_id`, COUNT(`date`)-6 missing
FROM (
SELECT `id`, `employee_id`, DATE(created_at) date
FROM `ticks`
WHERE `created_at` >= '2017-09-16' AND `created_at` < '2017-09-23'
GROUP BY `employee_id`, `date`
) ticks
GROUP BY `employee_id`
HAVING missing < 0
Run Code Online (Sandbox Code Playgroud)
基于那个或另一个查询,我想知道该范围内缺少哪个日期(顺便说一下,我可以从另一个查询中获取范围,每天至少有 1 个刻度,即使是在星期日)。
这是一个带有示例数据集的sqlfiddle。我期待的结果是:
+-------------+--------------+
| employee_id | date_missing |
+-------------+--------------+
| 2 | 2017-09-18 |
| 2 | 2017-09-19 |
| 3 | …Run Code Online (Sandbox Code Playgroud) 我想知道LIKE运算符是如何分类的,我有一个查询,其中有许多链式LIKE语句。以下结果在返回时如何优先排序?
AND (
ic.COLUMN_NAME like '%Address%'
OR ic.COLUMN_NAME like '%Email%'
OR ic.COLUMN_NAME like '%Phone%'
OR ic.COLUMN_NAME like '%Bank%'
OR ic.COLUMN_NAME like '%Number%'
OR ic.COLUMN_NAME like '%NAME%'
OR ic.COLUMN_NAME like '%Postcode%'
Run Code Online (Sandbox Code Playgroud)
只是为了补充说明,因为我认为有些人可能没有完全理解我的问题,我将举一个例子:
假设我正在寻找地址(而不是电子邮件)并且我使用以下语句:
select * from INFORMATION_SCHEMA.COLUMNS IC
where ic.COLUMN_NAME like '%Address%'
Run Code Online (Sandbox Code Playgroud)
这是我要回来的:
我用下面的代码做同样的事情:
select * from INFORMATION_SCHEMA.COLUMNS IC
where ic.COLUMN_NAME like '%Email%'
--OR ic.COLUMN_NAME like '%Email%'
Run Code Online (Sandbox Code Playgroud)
然后我得到这个:
这意味着在第一种情况下,我将取回地址和电子邮件地址。我知道它们只是字符串,但是我如何才能搜索地址而不取回电子邮件地址,例如email_address1、address_email1、web_Address_email等。我不想使用 ,where Column_Name = 'Address'因为这意味着我会错过不同的名称,例如地址 1、地址 2等
使用以下查询时,我无法从 bnrcno 列中获取数据。
select 'insert into table values('||id||','||bnrcno||','||chargetype||','||domno||','||coa_id||','||liability_gl||','||revenue_gl||','||taxno||')'
from bill_charges_map where domno=5
Run Code Online (Sandbox Code Playgroud)
该brcno列是整数类型,其中的大多数值都为空。
sql-server ×5
mysql ×3
mysql-5.6 ×2
cte ×1
date ×1
dynamic-sql ×1
insert ×1
join ×1
like ×1
pivot ×1
postgresql ×1
t-sql ×1
view ×1