我不确定这是否可以在一个存储过程中完成。我使用嵌套视图让它工作,但我希望它尽可能简洁。
每次我尝试从子查询中进行选择时,都会收到无法调试的错误。我了解如何获取输出的概念,但对语法很困难。
假设我们有一张大表,按以下格式列出了美国的每个家庭:
[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 |
你也许可以做这样的事情:
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 |