zoukankan      html  css  js  c++  java
  • T-SQL:透视数据(十三)

    透视数据实际上就是行状态转为例状态

    先加一张测试表

    IF OBJECT_ID('dbo.Orders', 'U') IS NOT NULL DROP TABLE dbo.Orders;
    GO
    
    CREATE TABLE dbo.Orders
    (
      orderid   INT        NOT NULL,
      orderdate DATE       NOT NULL,
      empid     INT        NOT NULL,
      custid    VARCHAR(5) NOT NULL,
      qty       INT        NOT NULL,
      CONSTRAINT PK_Orders PRIMARY KEY(orderid)
    );
    
    INSERT INTO dbo.Orders(orderid, orderdate, empid, custid, qty)
    VALUES
      (30001, '20070802', 3, 'A', 10),
      (10001, '20071224', 2, 'A', 12),
      (10005, '20071224', 1, 'B', 20),
      (40001, '20080109', 2, 'A', 40),
      (10006, '20080118', 1, 'C', 14),
      (20001, '20080212', 2, 'B', 12),
      (40005, '20090212', 3, 'A', 10),
      (20002, '20090216', 1, 'C', 20),
      (30003, '20090418', 2, 'B', 15),
      (30004, '20070418', 3, 'C', 22),
      (30007, '20090907', 3, 'D', 30);
    
    SELECT * FROM dbo.Orders;

    把这张表查出来

    SELECT empid, custid, SUM(qty) AS sumqty
    FROM dbo.Orders
    GROUP BY empid, custid;

    我们将 custid行转换成例 

    SELECT empid,
    SUM(CASE WHEN custid = 'A' THEN qty END) AS A,
    SUM(CASE WHEN custid = 'B' THEN qty END) AS B,
    SUM(CASE WHEN custid = 'C' THEN qty END) AS C,
    SUM(CASE WHEN custid = 'D' THEN qty END) AS D 
    FROM dbo.Orders
    GROUP BY empid;

    sql server 还支持一个子句用于 行转列 PIVOT  是以FROM内嵌 表表达式实现的

    SELECT empid, A, B, C, D
    FROM (SELECT empid, custid, qty
          FROM dbo.Orders) AS D
      PIVOT(SUM(qty) FOR custid IN(A, B, C, D)) AS P;

    PIVOT  (数据行)  for  要转的列  IN (转那几个数据)

  • 相关阅读:
    PHP工具下载地址
    Eclipse开发PHP环境配置
    Windows下搭建PHP开发环境
    无插件Vim编程技巧
    mvn详解
    Python读写文件
    python 大文件以行为单位读取方式比对
    insert时出现主键冲突的处理方法【转载】
    Python机器学习——线性模型
    机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)
  • 原文地址:https://www.cnblogs.com/feizianquan/p/9457366.html
Copyright © 2011-2022 走看看