zoukankan      html  css  js  c++  java
  • MS SQL 合并结果集并求和 分类: SQL Server 数据库 2015-02-13 10:59 92人阅读 评论(0) 收藏

    业务情景:有这样一张表:其中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等)统计数据。



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

  • 相关阅读:
    正则表达式(Python3-re模块示例)
    format函数之几种常规用法
    元组的拆包
    Python3魔术方法实现一摞卡牌
    Python字典的常见操作
    70. Climbing Stairs(js)
    69. Sqrt(x)(js)
    68. Text Justification(js)
    67. Add Binary(js)
    66. Plus One(js)
  • 原文地址:https://www.cnblogs.com/zhangqs008/p/4687625.html
Copyright © 2011-2022 走看看