请考虑数据:
Id Group Value
-----------------------------------
1 1 10
2 1 12
3 1 10
4 2 90
5 2 10
6 3 30
7 4 12
8 4 11
9 5 10
10 5 11
我想对此数据执行
Group By
操作,将 1,2,3
放置在一组中,并将 4,5
放置在另一组中。我怎样才能用SQL Server
做到这一点?
谢谢
编辑1)
我想要这个结果:
Groups Count
-----------------------------------------
Group for 1,2,3 6
Group for 4,5 4
我正在使用
outer apply
,这样您就不会将代码复制到组中
select
C.Group_Name, count(*)
from Table1
outer apply
(
select
case
when C.[Group] in (1, 2, 3) then 'Group for 1, 2, 3'
when C.[Group] in (4, 5) then 'Group for 4, 5'
end as Group_Name
) as C
group by C.Group_Name
您还可以使用子查询
select
C.Group_Name, count(*)
from
(
select
case
when T.[Group] in (1, 2, 3) then 'Group for 1, 2, 3'
when T.[Group] in (4, 5) then 'Group for 4, 5'
end as Group_Name,
T.Value,
T.Id
from Table1 as T
) as C
group by C.Group_Name
这也可以做你想做的事:
SELECT 'Group for 1,2,3' AS GROUPS
, COUNT(Id) AS Count
FROM Foo
WHERE [Group] IN (1,2,3)
UNION ALL
SELECT 'Group for 4,5' AS GROUPS
, COUNT(Id) AS Count
FROM Foo
WHERE [Group] IN (4,5)
http://sqlfiddle.com/#!6/cdb82/2/0
当然,只有当您知道自己想要哪些组时,这才有效。
我知道这是一篇旧文章,但我认为一个更简单的解决方案是:
SELECT
CASE
WHEN "Group" IN (1, 2, 3) THEN 'Group for 1, 2, 3'
WHEN "Group" IN (4, 5) THEN 'Group for 4, 5'
END AS "Groups",
COUNT("Value") AS "Count"
FROM
some_table
GROUP BY 1