2013-10-04 26 views
1

假設我想要計算W,X,Y和Z中元素的數量。我不關心WXY內的具體數字,關心Z.有沒有辦法可以讓這樣的事情:SQL如何使用計數和分組WXY和Z

column | count 
--------------- 
WXY | 10 
    Z | 5 

代替

column | count 
--------------- 
    W | 2 
    X | 3 
    Y | 5 
    Z | 5 
+0

請使用Ctrl + K,而不是一堆用於代碼格式化的' '和'
'標籤。 –

+0

這被標記爲sql-server和postgresql。你正在使用哪個數據庫版本?如果您需要針對兩者的解決方案,那麼您是否需要相同的查詢才能在兩個版本上工作,或者爲每個版本工作單獨查詢? –

回答

1
SELECT [column] = CASE 
    WHEN [column] IN ('W','X','Y') THEN 'WXY' ELSE 'Z' END, 
    [count] = COUNT(*) 
FROM dbo.[table] 
WHERE [column] IN ('W','X','Y','Z') 
    GROUP BY CASE 
    WHEN [column] IN ('W','X','Y') THEN 'WXY' ELSE 'Z' END 
ORDER BY [column]; 
1

SQL Fiddle

select case 
    when c in ('W', 'X', 'Y') then 'XYZ' 
    else 'Z' end as c, 
    count(*) 
from t 
group by 1 
+0

這將適用於PostGreSQL,但不適用於SQL Server。這個問題被標記爲兩個,所以目前還不清楚OP需要什麼。 –

1

您可以使用公用表表達式(CTE)輕鬆完成此操作,並在嘗試獲取記錄計數之前彙總數據。

它適用於PostgreSQL和SQL Server(但如果您命名列「列」則會出現問題)。

的PostgreSQL:SQL Fiddle SQL服務器:SQL Fiddle

;with aggData as 
(
    select case 
      when c = 'Z' then 'Z' 
      else 'WXY' 
      end as col 
    from t 
) 
select col, count(*) 
from aggData 
group by col 

下面是使用CTEs with SQL ServerCTEs with PostGreSQL文檔。