Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL选择计数案例比较2列_Sql Server - Fatal编程技术网

Sql server SQL选择计数案例比较2列

Sql server SQL选择计数案例比较2列,sql-server,Sql Server,我对一条比较两列的SQL语句感到震惊,当它们不相似时,该语句应该在计数中加1 这是我的密码 SELECT COUNT(*) CASE WHEN Column1 = Column2 THEN '0' ELSE '1' END AS result FROM [Sheet1$] GROUP BY Column1 我做错了什么?我得到查询表达式中缺少运算符的错误消息。COUNT(*)将对行进行计数,而不考虑结果中的值 SUM(result)可能就是您要查找的内容COUNT(*)将对行进行

我对一条比较两列的SQL语句感到震惊,当它们不相似时,该语句应该在计数中加1

这是我的密码

SELECT 
    COUNT(*) CASE WHEN Column1 = Column2 THEN '0' ELSE '1' END AS result 
FROM [Sheet1$] 
GROUP BY Column1
我做错了什么?我得到查询表达式中缺少运算符的错误消息。

COUNT(*)
将对行进行计数,而不考虑结果中的值

SUM(result)
可能就是您要查找的内容

COUNT(*)
将对行进行计数,而不考虑结果中的值

SELECT count(*)
WHERE NOT (Column1 = Column2)
FROM [Sheet1$]
SUM(result)
可能就是您想要的

SELECT count(*)
WHERE NOT (Column1 = Column2)
FROM [Sheet1$]
将计算有多少行的列不相等

将计算有多少行的列不相等。

这应该可以做到:

SELECT 
    SUM(CASE WHEN Column1 = Column2 THEN 0 ELSE 1 END) AS NumberOfDiffs,
    SUM(CASE WHEN Column1 = Column2 THEN 1 ELSE 0 END) AS NumberOfEquals
FROM [Sheet1$] 
这应该做到:

SELECT 
    SUM(CASE WHEN Column1 = Column2 THEN 0 ELSE 1 END) AS NumberOfDiffs,
    SUM(CASE WHEN Column1 = Column2 THEN 1 ELSE 0 END) AS NumberOfEquals
FROM [Sheet1$] 

如果要从考勤表中计算缺勤天数,请使用以下查询,D1是第一天,D2是第二天……依此类推

SELECT     TOP (200) PayrollYear, PayrollMonth, EmployeeId, EmployeeName, JobNo, SUM(CASE WHEN D1 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D2 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D3 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D4 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D5 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D6 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D7 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D8 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D9 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D10 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D11 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D12 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D13 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D14 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D15 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D16 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D17 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D18 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D19 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D20 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D21 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D22 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D23 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D24 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D25 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D26 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D27 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D28 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D29 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D30 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D31 = 'A' THEN 1 ELSE 0 END) 
                      AS TotAbsent
FROM         T_EmpAttendance
GROUP BY PayrollYear, PayrollMonth, EmployeeId, EmployeeName, JobNo

如果要从考勤表中计算缺勤天数,请使用以下查询,D1是第一天,D2是第二天……依此类推

SELECT     TOP (200) PayrollYear, PayrollMonth, EmployeeId, EmployeeName, JobNo, SUM(CASE WHEN D1 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D2 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D3 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D4 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D5 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D6 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D7 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D8 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D9 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D10 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D11 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D12 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D13 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D14 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D15 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D16 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D17 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D18 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D19 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D20 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D21 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D22 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D23 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D24 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D25 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D26 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D27 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D28 = 'A' THEN 1 ELSE 0 END) 
                      + SUM(CASE WHEN D29 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D30 = 'A' THEN 1 ELSE 0 END) + SUM(CASE WHEN D31 = 'A' THEN 1 ELSE 0 END) 
                      AS TotAbsent
FROM         T_EmpAttendance
GROUP BY PayrollYear, PayrollMonth, EmployeeId, EmployeeName, JobNo

删除您的文档末尾的双引号SQL@YoriKusanagi它甚至没有达到这一点,前面已经有一个语法错误:)@hvd-gotcha,缺少一个逗号“COUNT(*),CASE…”在你的结尾删除双引号SQL@YoriKusanagi它甚至没有达到这一点,前面已经有一个语法错误:)@hvd-gotcha,缺少一个逗号“COUNT(*),CASE…“否,这将计算有多少行具有不相等的列。如果任何值为
NULL
,“没有相等的列”(实际上更像是“不能显示有相等的列”)和“有不相等的列”的计算方式不同。对NULL的处理是一个值得关注的问题,但我在问题中没有看到任何建议如何计算NULL(如果有)。问题的方法(
当a=b时为0,否则为1结束
)将计算它们:
a=b
无法显示为真,因此采用了
ELSE
表达式。但OP还没有真正考虑到这一点,这可能是对的。感谢您的回答。但无论我如何尝试,它都会不断给出关于缺少运算符的错误。从可行的方法开始,例如,只需进行计数(*)在表中。上面的语法有错误,因此它是一个糟糕的起点。在
CASE
旁边有一个
COUNT(*)
,这没有意义。不,这将计算有多少行有不相等的列。如果任何值为
NULL
,“没有相等的列”(实际上更像是“不能显示相等的列”)和“有不相等的列”的计算方式不同。空值的处理是一个值得关注的问题,但我在问题中没有看到任何建议如何计算空值(如果有)。问题的方法(
当a=b时为0,否则为1结束
)将计算它们:
a=b
无法显示为真,因此采用了
ELSE
表达式。但OP还没有真正考虑到这一点,这可能是对的。感谢您的回答。但无论我如何尝试,它都会不断给出关于缺少运算符的错误。从可行的方法开始,例如,只需进行计数(*)在表中。您的以上语法有错误,因此它是一个糟糕的起点。您的
计数(*)
位于
大小写
旁边,这没有意义。选择SUM(result)CASE当srcetgtqy=Srce.a.qty时,然后选择result+0其他结果+1 END作为[Sheet1$]GROUP BY srcetgtqy的结果选择SUM(result)当SrceTgtQty=Srce.a.qty然后结果+0其他结果+1结束时,根据SrceTgtQty从[Sheet1$]分组