假设我正在尝试计算 W、X、Y 和 Z 中的元素数量。我不关心 WXY 中的特定数字,我只关心 Z。有没有办法可以制作这样的东西:
column | count
---------------
WXY | 10
Z | 5
代替
column | count
---------------
W | 2
X | 3
Y | 5
Z | 5
假设我正在尝试计算 W、X、Y 和 Z 中的元素数量。我不关心 WXY 中的特定数字,我只关心 Z。有没有办法可以制作这样的东西:
column | count
---------------
WXY | 10
Z | 5
代替
column | count
---------------
W | 2
X | 3
Y | 5
Z | 5
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];
select case
when c in ('W', 'X', 'Y') then 'XYZ'
else 'Z' end as c,
count(*)
from t
group by 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
这是有关将CTE 与 SQL Server 结合使用以及将CTE 与 PostGreSQL结合使用的文档。