MS SQL 合并结果集并求和 分类: SQL Server 数据库 ...

业务情景:有这样一张表:其中Id列为表主键,Name为用户名,State为记录的状态值,Note为状态的说明,方便阅读。


需求描述:需要查询出这样的结果:某个人某种状态的记录数,如:张三,待审核记录数,审核中记录数,审核通过记录数;大概像这样:


解决方案:

1.建表和初始化测试数据: 

--1.建表语句
CREATE TABLE [dbo].[Content]
(
	[Id] [int] NULL,
	[Name]   [nvarchar](50) NULL,
	[State]  [int] NULL,
	[Note]   [nvarchar](50) NULL,
)  
GO
--2.初始化数据
INSERT INTO CONTENT VALUES(1,'张三',1,'待审核')
INSERT INTO CONTENT VALUES(2,'张三',2,'审核中')
INSERT INTO CONTENT VALUES(3,'张三',2,'审核中')
INSERT INTO CONTENT VALUES(4,'李四',1,'待审核')
INSERT INTO CONTENT VALUES(5,'李四',2,'审核中')
INSERT INTO CONTENT VALUES(5,'李四',3,'审核通过')</span>
2.查询语句:

SELECT NAME,
       SUM(审核通过) AS '审核通过',
       SUM(待审核) AS '待审核',
       SUM(审核中) AS '审核中'
FROM   (
           (
               SELECT NAME,
                      COUNT(*) AS '审核通过',
                      0 AS '审核中',
                      0 AS '待审核'
               FROM   CONTENT
               WHERE  [STATE] = 3
                      AND NAME IN ('张三', '李四')
               GROUP BY
                      NAME
           ) 
           
           UNION 
           
           (
               SELECT NAME,
                      0 AS '审核通过',
                      COUNT(*) AS '审核中',
                      0 AS '待审核'
               FROM   CONTENT
               WHERE  [STATE] = 2
                      AND NAME IN ('张三', '李四')
               GROUP BY
                      NAME
           ) 
           UNION 
           (
               SELECT NAME,
                      0 AS '审核通过',
                      0 AS '审核中',
                      COUNT(*) AS '待审核'
               FROM   CONTENT
               WHERE  [STATE] = 1
                      AND NAME IN ('张三', '李四')
               GROUP BY
                      NAME
           )
       )temp
GROUP BY
       NAME</span>

这里用到两个知识点:

1.UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

2.GROUP BY + 聚合函数(如SUM, COUNT, MAX, AVG等)统计数据。



版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值