sql-server - sql server 中的多列数据透视
问题描述
这是我尝试过的,但与我的意思不完全相同
CREATE TABLE #dta
(
Data [nvarchar](max),
Date [varchar] (12) ,
GR [int] ,
Refund [int] ,
Sales [int] ,
)
INSERT INTO #dta
SELECT 'asd',1,10,0,0 UNION ALL
SELECT 'asd',2,0,0,4 UNION ALL
SELECT 'asd',3,4,1,1 UNION ALL
SELECT 'qwe',1,2,0,0 UNION ALL
SELECT 'qwe',3,0,0,1 UNION ALL
SELECT 'zxc',1,0,0,5 UNION ALL
SELECT 'zxc',2,4,0,1 UNION ALL
SELECT 'zxc',3,0,1,5
--Only for sales
SELECT data, [1],[2],[3] FROM
(SELECT data, [date] , Sales FROM #dta )Tab1
PIVOT
(
SUM(Sales) FOR [date] IN ([1],[2],[3])) AS Tab2
ORDER BY Tab2.Data
解决方案
您可以使用条件聚合并尝试以下代码:
SELECT t.[Data]
,MAX(CASE WHEN t.[Date]=1 THEN t.Sales END) AS [Sales_Date_1]
,MAX(CASE WHEN t.[Date]=1 THEN t.Refund END) AS [Refund_Date_1]
,MAX(CASE WHEN t.[Date]=1 THEN t.GR END) AS [GR_Date_1]
,MAX(CASE WHEN t.[Date]=2 THEN t.Sales END) AS [Sales_Date_2]
,MAX(CASE WHEN t.[Date]=2 THEN t.Refund END) AS [Refund_Date_2]
,MAX(CASE WHEN t.[Date]=2 THEN t.GR END) AS [GR_Date_2]
,MAX(CASE WHEN t.[Date]=3 THEN t.Sales END) AS [Sales_Date_3]
,MAX(CASE WHEN t.[Date]=3 THEN t.Refund END) AS [Refund_Date_3]
,MAX(CASE WHEN t.[Date]=3 THEN t.GR END) AS [GR_Date_3]
FROM #dta t
GROUP BY t.[Data];
如果(示例数据中的 1 到 3)的计数t.[Date]
不限于已知最大值,则您必须动态创建语句。
如果您的t.[Date]
列实际上是一个日期值,并且您希望您的输出列以您的集合中的某些日期值(不可预测的列别名)命名,那么您也必须动态创建它。
推荐阅读
- css - Webkit-tap-highlight-color 不适用于 li 元素?
- python - OpenCV 调整大小问题无法正常工作
- r - 从 R 中的同一线性模型中提取特定的交互系数
- javascript - 回归系数显示为方程
- python - Requests.get 函数未检索任何数据。怎么了?
- powershell - 远程在多台服务器上执行powershell脚本
- python - 在 PySpark 中将每对值组合成元组
- c# - 实体框架:已定义具有架构的实体
- javascript - 我收到 TypeError 说 forEach 不是函数?
- python - Django 详细信息视图