Count

同一列 SQL 的多次計數

  • January 9, 2020

目前使用以下 SQL 從同一列獲取多個計數,但我的結果返回的結果都相同

SELECT
act.OWNER_LOGIN,
COUNT(CASE WHEN act.X_ACTIVITY ='Call' THEN 1 ELSE 0 end) AS YTD_Calls,
COUNT(CASE WHEN act.X_ACTIVITY ='Email' THEN 1 ELSE 0 end) AS YTD_Email,
COUNT(CASE WHEN act.X_ACTIVITY ='Turret' THEN 1 ELSE 0 end) AS YTD_Turret,
COUNT(CASE WHEN act.X_ACTIVITY ='Instant Message' THEN 1 ELSE 0 end) AS YTD_Instant_Message
FROM S_EVT_ACT act WITH(NOLOCK) 
WHERE act.OWNER_LOGIN IN ('AC52710','AE34410')

結果

OWNER_LOGIN YTD_Calls   YTD_Email   YTD_Turret  YTD_Instant_Message
AC52710       421          421         421            421
AE34410       4279         4279        4279           4279

所有這些值都應該不同,不確定我哪裡出錯了,或者是否有其他方法可以實現我想要的

你需要使用SUM(CASE )COUNT(CASE )

Count 將為您提供所有條目的計數,即全為 0 和全為 1

Sum 將為您提供 1 的總數,但 0 將被忽略

count 將包括表達式不為空的所有行,如果要使用,請count確保 CASE 表達式為您不想計算的情況返回 NULL 值:

COUNT(CASE WHEN act.X_ACTIVITY ='Call' THEN 1 end)

但不提供 ELSE 時,CASE 表達式將為活動不是呼叫的所有內容返回 NULL。

引用自:https://dba.stackexchange.com/questions/210354