使用情况下,当重复计数的声明时在SQL Server

问题描述 投票:1回答:2

我无法使用的情况下,当和SQL Server不同,当得到正确的重复计数。

我有计数(不同TA_STUDENT_ID),计算正确的计数的列。那么我在我下TA_LOCATION做的TA_LOCATION和总数的计数每行数字2个附加列需要加起来DISTINCT TA_STUDENT_ID的计数。我需要帮助得到它这样做。这里是我的查询:

SELECT 
count  (distinct TA_STUDENT_ID) as 'count',
COUNT (CASE WHEN (TA_LOCATION = 'CCC') THEN 'CCC'  END) AS 'CCC',
COUNT(CASE WHEN (TA_LOCATION = 'SCCDC') THEN 'SCCDC'  END) AS 'SCCDC',      
[TA_AW_ID]
FROM  [S85_TA_ACYR]
group by   [TA_AW_ID]
order by  [TA_AW_ID]

我想要的结果是,在TA_LOCATION列上每行的总数应该总在我的COUNT DISTINCT TA_STUDENT_ID列匹配的行号码。

sql-server distinct case-when
2个回答
1
投票

使用DISTINCT里面有COUNT()表达CASE

SELECT COUNT(DISTINCT TA_STUDENT_ID) as 'count',
       COUNT(DISTINCT CASE WHEN (TA_LOCATION = 'CCC') THEN TA_STUDENT_ID  END) AS 'CCC',
       COUNT(DISTINCT CASE WHEN (TA_LOCATION = 'SCCDC') THEN TA_STUDENT_ID  END) AS 'SCCDC',      
       [TA_AW_ID]
FROM  [S85_TA_ACYR]
GROUP BY [TA_AW_ID]
ORDER BY [TA_AW_ID];

1
投票

你也可以使用一个SUM()第二两个领域,就像这样:

SELECT
    Count = COUNT(DISTINCT TA_STUDENT_ID)
    ,CCC = SUM(CASE WHEN ( TA_LOCATION = 'CCC' ) THEN 1 ELSE 0 END)
    ,SCCDC = SUM(CASE WHEN ( TA_LOCATION = 'SCCDC' ) THEN 1 ELSE 0 END)
    ,TA_AW_ID
FROM S85_TA_ACYR
GROUP BY TA_AW_ID
ORDER BY TA_AW_ID
© www.soinside.com 2019 - 2024. All rights reserved.