自定义分组依据并将一些记录放入一组

问题描述 投票:0回答:3

请考虑数据:

 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
sql sql-server sql-server-2008
3个回答
3
投票

我正在使用

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

3
投票

这也可以做你想做的事:

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

当然,只有当您知道自己想要哪些组时,这才有效。


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
© www.soinside.com 2019 - 2024. All rights reserved.