0

我对比较 2 列的 SQL 语句感到头疼,当它们不相似时,该语句应将计数加 1。

这是我的代码。

SELECT 
    COUNT(*) CASE WHEN Column1 = Column2 THEN '0' ELSE '1' END AS result 
FROM [Sheet1$] 
GROUP BY Column1

我究竟做错了什么?我收到查询表达式中缺少运算符的错误消息。

4

5 回答 5

3

COUNT(*)无论结果中的值如何,都会计算行数。

SUM(result)可能是你要找的

于 2013-06-14T12:51:59.237 回答
2

这应该这样做:

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$] 
于 2013-06-14T14:09:57.440 回答
0
SELECT count(*)
WHERE NOT (Column1 = Column2)
FROM [Sheet1$]

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

于 2013-06-14T12:58:29.323 回答
0

如果您想从考勤表中计算缺勤天数,请使用以下查询,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
于 2013-11-23T18:18:39.610 回答
0
SELECT count(*),CASE WHEN col1=col2 THEN 'same' ELSE 'different' END AS x
FROM theTable
group by CASE WHEN col1=col2 THEN 'same' ELSE 'different' END

我使用的是 Oracle,它不允许我按 x(别名)分组,所以我按 CASE 语句分组,它工作正常。

于 2021-08-25T04:22:47.717 回答