SQLServer中几种行列转换的方式
2013-05-22 21:27
253 查看
--查询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
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
相关文章推荐
- Oracle学习之路-- 案例分析实现行列转换的几种方式
- GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换
- python类别变量(class_label)转换为One_Hot的几种方式
- SQLSERVER数据集行列转换PIVOT
- C++中将string类型转换为int, float, double类型 主要通过以下几种方式:
- SQLServer行列转换 Pivot UnPivot
- JS全角自动转换成半角的几种方式
- SQLServer行列转换 Pivot UnPivot
- SQLServer中行列转换SQL
- 将html转换为word文档的几种方式
- Oracle一个典型行列转换的几种实现方法
- VC中ADO连接SQLSERVER的几种标准方式
- java中进制转换的几种实现方式
- C# 对象与JSON字符串互相转换的几种方式
- C++ 几种方式的类型转换
- SQLServer之行列转换
- SQLServer行列转换PIVOT函数中聚合函数的使用意义及选择
- 使用XStream处理Xml文档和实体类之间的转换的几种方式
- 将xml布局转换成View的几种方式
- sqlserver 数据库迁移的几种方式