聚合到自定义组中

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

我不确定这是否可以在一个存储过程中完成。我使用嵌套视图让它工作,但我希望它尽可能简洁。

每次我尝试从子查询中进行选择时,都会收到无法调试的错误。我了解如何获取输出的概念,但对语法很困难。

假设我们有一张大表,按以下格式列出了美国的每个家庭:

[dbo]。[US_HOUSEHOLDS_TABLE]

HOUSEHOLD_ID FAMILY_NAME MEMBER_NAME
1 安德森 罗伯特
1 安德森 玛丽
1 安德森 科迪
1 安德森 布列塔尼
2 卡弗 威廉
2 卡佛 苏珊娜
3 华盛顿 弗雷德
3 华盛顿 埃塞尔
3 华盛顿 托尼
4 史密斯 达琳
4 史密斯 艾米
4 史密斯 理查德

所需输出:

家庭规模 频率
1 23,903,124
2 57,116,548
3 38,617,295
4 12,397,106
5 3,108,284
6个或更多 1,393,571
sql sql-server t-sql aggregate grouping
1个回答
0
投票

你也许可以做这样的事情:

SELECT  *
INTO #data
FROM    (
    VALUES  (1, N'Anderson', N'Robert')
    ,   (1, N'Anderson', N'Mary')
    ,   (1, N'Anderson', N'Cody')
    ,   (1, N'Anderson', N'Brittany')
    ,   (2, N'Carver', N'William')
    ,   (2, N'Carver', N'Suzanne')
    ,   (3, N'Washington', N'Fred')
    ,   (3, N'Washington', N'Ethel')
    ,   (3, N'Washington', N'Tony')
    ,   (4, N'Smith', N'Darlene')
    ,   (4, N'Smith', N'Amy')
    ,   (4, N'Smith', N'Richard')
    ,   (4, N'Smith', N'Darlene')
    ,   (4, N'Smith', N'Amy')
    ,   (4, N'Smith', N'Richard')
    ,   (5, 'Sigge', 'Mannen')
    ,   (5, 'Stack', 'Overflow')
    
) t (HOUSEHOLD_ID,FAMILY_NAME,MEMBER_NAME)

SELECT  CASE WHEN cnt < 6 THEN CAST(cnt AS VARCHAR(30)) ELSE '6 or more' END AS HouseHold
,   COUNT(*) AS Total
FROM    (
    SELECT  count(*) AS cnt
    FROM    #data
    GROUP BY HOUSEHOLD_ID
    ) x
GROUP BY CASE WHEN cnt < 6 THEN CAST(cnt AS VARCHAR(30)) ELSE '6 or more' END

首先,您获得家庭的计数,然后按该计数进行分组。

6岁以上的人有自己的小组。

输出:

家居 总计
2 2
3 1
4 1
6个或更多 1
© www.soinside.com 2019 - 2024. All rights reserved.