只获取sql查询中列的第一个实例的总和

时间:2015-01-19 15:43:19

标签: sql sql-server

我有以下SQL代码:

SELECT EmployeeID,
    SUM(CASE 
            WHEN Error1 = '0'
                THEN 1
            ELSE 0
            END + CASE 
            WHEN Error2 = '0'
                THEN 1
            ELSE 0
            END + CASE 
            WHEN Error3 = '0'
                THEN 1
            ELSE 0
            END) AS TotalErrors
FROM SubmittedDocuments
GROUP BY EmployeeID

该语句应计算每个员工表中的错误数。但是,表SubmittedDocuments中还有另一列名为“DocumentName”。我怎么能写一个只计算每个DocumentName的第一个实例的错误的语句? (或仅计算具有最低“SubmittedID”的那个,唯一标识符)

对不起,如果有任何不清楚的地方,我会尝试澄清评论中的任何混淆。

2 个答案:

答案 0 :(得分:2)

我认为你不想聚合。我想你只想为每个名字选择第一个文件。

如果是这样,这可能是你想要的:

select sd.*,
       ((case when error1 = '0' then 1 else 0 end) +
        (case when error2 = '0' then 1 else 0 end) +
        (case when error3 = '0' then 1 else 0 end)
       ) as numerrors
from (select sd.*,
             row_number() over (partition by documentname order by submittedid) as seqnum
      from SumittedDocuments sd
     ) sd
where seqnum = 1;

答案 1 :(得分:2)

我可能没有从你的问题中得到这个,但我认为这应该有效。如果您可以显示一些样本数据和预期输出,那么我们肯定能得到肯定的答案。

SELECT EmployeeID
    SUM(CASE WHEN DocIDErr > 1 THEN 0 ELSE 1 END)
FROM
(SELECT EmployeeID
   , Error1
   , ROW_NUMBER() OVER (PARTITION BY EmployeeID ORDER BY DocumentName) AS DocIDErr
FROM SubmittedDocuments) AS RS
GROUP BY EmployeeID