Dan*_*Day 2 sql-server group-by count
我目前正在使用此SQL语句返回由谁完成每条记录(RFI)的计数:
SELECT Completed_By, COUNT(DISTINCT Unique_ID) AS RFICount FROM RFI_
WHERE Date_Submitted BETWEEN '20110101' AND '20110630'
GROUP BY Completed_By
Run Code Online (Sandbox Code Playgroud)
这将返回如下数据集:
Completed_By RFICount
------------ ---------
SMITH, Bob 1
DOE, John 15
WARNER, Jack 11
Run Code Online (Sandbox Code Playgroud)
这就是我想要的样子。但是,某人可以是完成或协助完成记录(RFI)的主要或次要人员。无论他们是完成记录(Completed_By)还是完成记录(Assisting_Analyst),我都希望在一栏中显示所有内容。
当我使用以下SQL语句时,当需要聚合它们时,它们将显示为单独:
SELECT Completed_By, Assisting_Analyst, COUNT(DISTINCT Unique_ID) AS RFICount
FROM RFI_ WHERE Date_Submitted BETWEEN '20110101' AND '20110630'
GROUP BY Completed_By, Assisting_Analyst
Run Code Online (Sandbox Code Playgroud)
这将返回以下类型的输出:
Completed_By Assisting_Analyst RFICount
------------ ----------------- --------
SMITH, Bob NULL 1
DOE, John NULL 15
WARNER, Jack NULL 7
WARNER, Jack SMITH, Bob 4
Run Code Online (Sandbox Code Playgroud)
由于鲍勃·史密斯(Bob Smith)为杰克·华纳(Jack Warner)提供了四个记录(RFI),因此将创建一个单独的行。但我只是希望每个人都获得个人荣誉,并将其显示在一个栏中,如下所示:
Completed_By RFICount
------------ ---------
SMITH, Bob 5
DOE, John 15
WARNER, Jack 11
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,他们共同处理的四个记录归功于两个记录。当然,这意味着一些记录被计算了两次,但这就是我想要的此应用程序的结果。
我已经尝试了UNIONS和其他很多东西,但是它要么没有给我我想要的显示效果,要么给了我没有数据的错误。我知道DISTINCT已经走了,但不确定如何确切地做到这一点。这是在SQL Server 2008 R2中完成的。救命?
SELECT t.Completed_By, COUNT(DISTINCT t.Unique_ID) AS RFICount
FROM (SELECT Completed_By, Unique_ID
FROM RFI_
WHERE Date_Submitted BETWEEN '20110101' AND '20110630'
UNION ALL
SELECT Assisting_Analyst AS Completed_By, Unique_ID
FROM RFI_
WHERE Date_Submitted BETWEEN '20110101' AND '20110630'
AND Assisting_Analyst IS NOT NULL) t
GROUP BY t.Completed_By
Run Code Online (Sandbox Code Playgroud)