zoukankan      html  css  js  c++  java
  • sql中的行转列

    例子:
    name subject result 姓名 语文 数学 物理
    张三 语文 80 张三 80 90 88
    张三 数学 90
    张三 物理 88 转换成: 李四 85 82 90
    李四 语文 85
    李四 数学 82
    李四 物理 90

    select [name] as 姓名,
    sum(case when suject='语文' then result end) as 语文
    sum(case when suject='数学' then result end) as 数学
    sum(case when suject='物理' then result end) as 物理
    from cj group by[name]

    SELECT
    UserName,
    MAX(CASE Subject WHEN '语文' THEN Score ELSE 0 END) AS '语文',
    MAX(CASE Subject WHEN '数学' THEN Score ELSE 0 END) AS '数学',
    MAX(CASE Subject WHEN '英语' THEN Score ELSE 0 END) AS '英语',
    MAX(CASE Subject WHEN '生物' THEN Score ELSE 0 END) AS '生物'
    FROM dbo.[StudentScores]
    GROUP BY UserName


    SELECT <非透视的列>,
    [第一个透视的列] AS <列名称>,
    [第二个透视的列] AS <列名称>,
    ...
    [最后一个透视的列] AS <列名称>,
    FROM
    (<生成数据的 SELECT 查询>)
    AS <源查询的别名>
    PIVOT
    (
    <聚合函数>(<要聚合的列>)
    FOR
    [<包含要成为列标题的值的列>]
    IN ( [第一个透视的列], [第二个透视的列],
    ... [最后一个透视的列])
    ) AS <透视表的别名>
    <可选的 ORDER BY 子句>;
    举个简单的例子
    USE AdventureWorks2008R2;
    GO
    SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5
    FROM
    (SELECT PurchaseOrderID, EmployeeID, VendorID
    FROM Purchasing.PurchaseOrderHeader) p
    PIVOT
    (
    COUNT (PurchaseOrderID)
    FOR EmployeeID IN
    ( [250], [251], [256], [257], [260] )
    ) AS pvt
    ORDER BY pvt.VendorID;
    以下为部分结果集
    VendorID Emp1 Emp2 Emp3 Emp4 Emp5
    1492 2 5 4 4 4
    1494 2 5 4 5 4
    1496 2 4 4 5 5
    1498 2 5 4 4 4
    1500 3 4 4 5 4
    将在 EmployeeID 列上透视此嵌套 select 语句返回的结果。

    //网址:http://www.poluoluo.com/jzxy/201010/95918_2.html
    SELECT
    CreateTime, [支付宝] , [手机短信],
    [工商银行卡] , [建设银行卡]
    FROM
    (
    SELECT CONVERT(VARCHAR(10), CreateTime, 120) AS CreateTime,PayType, Money
    FROM Inpours
    ) P
    PIVOT (
    SUM(Money)
    FOR PayType IN
    ([支付宝], [手机短信], [工商银行卡], [建设银行卡])
    ) AS T
    ORDER BY CreateTime


    'PIVOT' 附近有语法错误。您可能需要将当前数据库的兼容级别设置为更高的值,以启用此功能。有关存储过程 sp_dbcmptlevel 的信息,请参见帮助。
    这个是因为:对升级到 SQL Server 2005 或更高版本的数据库使用 PIVOT 和 UNPIVOT 时,必须将数据库的兼容级别设置为 90 或更高。
    有关如何设置数据库兼容级别的信息,
    请参阅 sp_dbcmptlevel (Transact-SQL)。 例如,只需在执行上面脚本前加上 EXEC sp_dbcmptlevel Test, 90; 就OK了, Test 是所在数据库的名称。

  • 相关阅读:
    js去掉字符串前后空格三种方法及最佳方案
    javascript笔记:Date对象及操作方法
    高性能网站建设指南总结
    javascript之词法作用域及函数的运行过程
    LETTers比赛第四场N!
    LETTers比赛第三场 1003 大明A+B解题报告
    LETTers比赛第三场 1004 Max Sum Plus Plus 解题报告
    LETTers比赛第三场 1002 Ignatius and the Princess III解题报告
    LETTers第五场Sleeping 解题报告
    LETTers比赛第四场N!的最高位
  • 原文地址:https://www.cnblogs.com/lff255356/p/2741272.html
Copyright © 2011-2022 走看看