• SQLServer中几种行列转换的方式


    --查询SalesOrder中每年每个月各个customer的产生的订单总数量
    1、使用PIVOT
    SELECT x.*
    FROM ( SELECT YEAR(SalesOrderDate) [Year] ,
                        MONTH(SalesOrderDate) AS [Month] ,
                        CustomerCode ,
                        TotalQTY
              FROM dbo.SalesOrder
            ) so
    PIVOT (
     SUM (so.TotalQTY)
     FOR [Month] IN ( [1], [2], [3], [4], [5],[6], [7], [8], [9],[10], [11], [12] )
    )x
    ORDER BY x.[Year] ,
       x.CustomerCode 
    2、case when
    SELECT YEAR(SalesOrderDate) AS Year,
      CustomerCode,
      SUM(CASE MONTH(SalesOrderDate)WHEN 1 THEN TotalQTY END) AS '1',
      SUM(CASE MONTH(SalesOrderDate)WHEN 2 THEN TotalQTY END) AS '2',
      SUM(CASE MONTH(SalesOrderDate)WHEN 3 THEN TotalQTY END) AS '3',
      SUM(CASE MONTH(SalesOrderDate)WHEN 4 THEN TotalQTY END) AS '4',
      SUM(CASE MONTH(SalesOrderDate)WHEN 5 THEN TotalQTY END) AS '5',
      SUM(CASE MONTH(SalesOrderDate)WHEN 6 THEN TotalQTY END) AS '6',
      SUM(CASE MONTH(SalesOrderDate)WHEN 7 THEN TotalQTY END) AS '7',
      SUM(CASE MONTH(SalesOrderDate)WHEN 8 THEN TotalQTY END) AS '8',
      SUM(CASE MONTH(SalesOrderDate)WHEN 9 THEN TotalQTY END) AS '9',
      SUM(CASE MONTH(SalesOrderDate)WHEN 10 THEN TotalQTY END) AS '10',
      SUM(CASE MONTH(SalesOrderDate)WHEN 11 THEN TotalQTY END) AS '11',
      SUM(CASE MONTH(SalesOrderDate)WHEN 12 THEN TotalQTY END) AS '12'
    FROM dbo.SalesOrder s
    GROUP BY YEAR(s.SalesOrderDate),
      CustomerCode
    ORDER BY YEAR(SalesOrderDate),CustomerCode
    3、动态条件
    DECLARE @PivotColHeader VARCHAR(MAX) 
    SELECT @PivotColHeader = 
    COALESCE(@PivotColHeader + ',[' + cast(MONTH(SalesOrderDate) as varchar) + ']', '[' + cast(MONTH(SalesOrderDate) as varchar) + ']') 
     --示例中Name转换为varchar或char类型,注意:在CAST 和CONVERT 中使用varchar 时,显示n的默认值为30 
    FROM SalesOrder 
    GROUP BY MONTH(SalesOrderDate); 
    DECLARE @PivotTableSQL NVARCHAR(MAX) 
    SET @PivotTableSQL = N' 
    SELECT x.* 
    FROM ( SELECT YEAR(SalesOrderDate) [Year] , 
    MONTH(SalesOrderDate) AS [Month] , 
    CustomerCode , 
    TotalQTY 
    FROM dbo.SalesOrder 
    ) so 
    PIVOT ( 
    SUM (so.TotalQTY) 
    FOR [Month] IN ('+@PivotColHeader+') 
    )x 
    ORDER BY x.[Year] , 
    x.CustomerCode' 
    EXECUTE sp_executesql @PivotTableSQL
  • 相关阅读:
    jQuery选择器大全
    MVC自定义数据验证(两个时间的比较)
    SQLServer开发总结
    疯狂的订餐系统软件需求分析挑战之旅1
    疯狂的订餐系统软件需求分析挑战之旅2
    net中C#自动化调用Word的实例总结
    软件开发中代码自动化的一点浅见
    代码自动化(1)开篇
    代码自动化(2)程序设计
    Excel 手机号码、身份证 等信息 导入到SQL2005 中,转换成字符是自动变成 科学计数法 的解决方法
  • 原文地址:https://www.cnblogs.com/xiexingen/p/3093692.html
Copyright © 2020-2023  润新知