使用 Case When 时的不同计数
Distinct Count when using Case When
在 SQL 服务器中使用 case when 和 distinct 时,我无法获得正确的非重复计数。
我有一列 count(distinct TA_STUDENT_ID) 可以计算出正确的计数。然后我有 2 个额外的列,我在其中按 TA_LOCATION 进行计数,TA_LOCATION 下每一行的数字总计需要加起来等于 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 列中的行数相匹配。
在 COUNT()
中使用 DISTINCT
和 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];
您还可以对后两个字段使用 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
在 SQL 服务器中使用 case when 和 distinct 时,我无法获得正确的非重复计数。
我有一列 count(distinct TA_STUDENT_ID) 可以计算出正确的计数。然后我有 2 个额外的列,我在其中按 TA_LOCATION 进行计数,TA_LOCATION 下每一行的数字总计需要加起来等于 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 列中的行数相匹配。
在 COUNT()
中使用 DISTINCT
和 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];
您还可以对后两个字段使用 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