Sql 按特定列中的条件求和
我对SQL Server查询SUM有疑问 我有两张桌子: 1 EmployeesAtt EId,EName,Stats->我有一些统计标准0=迟到,1=加班,2=正常Sql 按特定列中的条件求和,sql,sql-server,Sql,Sql Server,我对SQL Server查询SUM有疑问 我有两张桌子: 1 EmployeesAtt EId,EName,Stats->我有一些统计标准0=迟到,1=加班,2=正常 ----------------------------- | EId | EName | Stats | ----------------------------- | 1 | John | 0 | |---------------------------|
-----------------------------
| EId | EName | Stats |
-----------------------------
| 1 | John | 0 |
|---------------------------|
| 1 | John | 1 |
|---------------------------|
| 1 | John | 0 |
|---------------------------|
| 2 | Lynda | 2 |
-----------------------------
2个AttLogs ID、EId、迟到、加班、正常
从EmployeesAtt表中,我想对AttLogs中专用列中的EId和统计数据求和,如下所示:
--------------------------------------------------
| ID | EId | late | overtime | Normal |
--------------------------------------------------
| 0 | John | 2 | 1 | 0 |
|------------------------------------------------|
| 1 | Lynda | 0 | 0 | 1 |
--------------------------------------------------
这就是我到目前为止所做的:
select EA.EId, EA.EName, late = case when Stats = 0 then SUM(Stats) END,
overtime = case when Stats = 1 then SUM(Stats) END,
normal = case when Stats = 2 then SUM(Stats) END
From EmployeesAtt EA JOIN AttLogs AL ON AL.EId = EA.EId
GROUP BY EA.EId, EA.EName, EA.Stats
但是结果并不像我在上面预期的那样。您需要使用条件聚合和对案例表达式求和/计数:
SELECT
ea.EId,
ea.EName,
COUNT(CASE WHEN Stats = 0 THEN 1 END) AS late,
COUNT(CASE WHEN Stats = 1 THEN 1 END) AS overtime,
COUNT(CASE WHEN Stats = 2 THEN 1 END) AS normal
FROM EmployeesAtt ea
INNER JOIN AttLogs al
ON al.EId = ea.EId
GROUP BY
ea.EId,
ea.EName;
最大限度地利用sql server中的iif函数
谢谢你的快速回复@Tim Biegeleisen,我会立即尝试,我会尽快告诉你它是否有效。谢谢你的查询@Tim Biegeleisen,它完全符合我的要求。你真的帮了我,谢谢你!
select EA.EId
, EA.EName
, late = sum(iif(Stats=0, 1, 0))
, overtime = sum(iif(Stats=0, 1, 0))
, normal = sum(iif(Stats=0, 1, 0))
From EmployeesAtt EA
JOIN AttLogs AL ON AL.EId = EA.EId
GROUP BY EA.EId, EA.EName