Sql server SQL选择计数案例比较2列
我对一条比较两列的SQL语句感到震惊,当它们不相似时,该语句应该在计数中加1 这是我的密码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(*)将对行进行
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$]分组