1

假设我正在尝试计算 W、X、Y 和 Z 中的元素数量。我不关心 WXY 中的特定数字,我只关心 Z。有没有办法可以制作这样的东西:

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

代替

column | count
---------------
  W    |  2
  X    |  3
  Y    |  5
  Z    |  5
4

3 回答 3

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];
于 2013-10-04T22:25:30.800 回答
1

SQL小提琴

select case 
    when c in ('W', 'X', 'Y') then 'XYZ'
    else 'Z' end as c,
    count(*)
from t
group by 1
于 2013-10-04T22:35:06.843 回答
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结合使用的文档。

于 2013-10-04T22:51:12.037 回答