Sql 转置保持秩序
要转换此信息 我正在使用这个查询Sql 转置保持秩序,sql,sql-server,Sql,Sql Server,要转换此信息 我正在使用这个查询 SELECT MAX([WM Week]) [WM Week],WKDate,SUM(CAST(CAST([Value] AS DECIMAL(12, 5)) AS INT)) AS Value FROM [dbo].[s_Validation] UNPIVOT (Value FOR WKDate IN ([Sat Qty],[Sun Qty], [Mon Qty],[Tue Qty],[Wed Qty],[Thu Qty],[Fri Qt
SELECT MAX([WM Week]) [WM Week],WKDate,SUM(CAST(CAST([Value] AS DECIMAL(12, 5)) AS INT)) AS Value
FROM [dbo].[s_Validation]
UNPIVOT
(Value FOR WKDate IN
([Sat Qty],[Sun Qty], [Mon Qty],[Tue Qty],[Wed Qty],[Thu Qty],[Fri Qty])
)AS unpvt
GROUP BY unpvt.WKDate;
但是,我想保留订单:sat数量、sun数量、mon数量等,我通过以下方式获取信息:
有没有办法保持转置句的顺序
SELECT MAX([WM Week]) [WM Week]
, WKDate
, SUM(CAST(CAST([Value] AS DECIMAL(12, 5)) AS INT)) AS [Value]
, CASE WKDate WHEN 'Sat Qty' THEN 1
WHEN 'Sun Qty' THEN 2
WHEN 'Mon Qty' THEN 3
WHEN 'Tue Qty' THEN 4
WHEN 'Wed Qty' THEN 5
WHEN 'Thu Qty' THEN 6
WHEN 'Fri Qty' THEN 7
END [OrderKey]
FROM [dbo].[s_Validation]
UNPIVOT
(Value FOR WKDate IN
([Sat Qty],[Sun Qty], [Mon Qty],[Tue Qty],[Wed Qty],[Thu Qty],[Fri Qty])
)AS unpvt
GROUP BY unpvt.WKDate
ORDER BY [OrderKey];
或者干脆
SELECT MAX([WM Week]) [WM Week]
, WKDate
, SUM(CAST(CAST([Value] AS DECIMAL(12, 5)) AS INT)) AS [Value]
FROM [dbo].[s_Validation]
UNPIVOT
(Value FOR WKDate IN
([Sat Qty],[Sun Qty], [Mon Qty],[Tue Qty],[Wed Qty],[Thu Qty],[Fri Qty])
)AS unpvt
GROUP BY unpvt.WKDate
ORDER BY CASE WKDate
WHEN 'Sat Qty' THEN 1
WHEN 'Sun Qty' THEN 2
WHEN 'Mon Qty' THEN 3
WHEN 'Tue Qty' THEN 4
WHEN 'Wed Qty' THEN 5
WHEN 'Thu Qty' THEN 6
WHEN 'Fri Qty' THEN 7
END;
外部应用将允许您取消PIVOT并添加订单列
select MAX([WM Week]) [WM Week],
WkDate,
SUM(CAST(CAST([Value] AS DECIMAL(12, 5)) AS INT)) AS [Value],
from s_Validation s
outer apply (
values('Sat Qty', [Sat Qty], 1),
('Sun Qty', [Sun Qty], 2),
('Mon Qty', [Mon Qty], 3),
('Tue Qty', [Tue Qty], 4),
('Wed Qty', [Wed Qty], 5),
('Thu Qty', [Thu Qty], 6),
('Fri Qty', [Fri Qty], 7)
) v(WkDate, [Value], [Order])
group by WkDate, [Order]
order by [Order]
奇怪的是为什么这被否决了。。。