[英]Consolidating and Pivoting Data in SQL
我有一个数据源,描述的销售交易格式如下:
Transaction | Date | Location | UPC | LineNumber
----------------+-----------+----------+-----------+------------
123 | 7/2/2016 | Store A | 123456789 | 1
123 | 7/2/2016 | Store A | 123965478 | 2
124 | 7/2/2016 | Store A | 123456789 | 1
124 | 7/2/2016 | Store A | 123459879 | 2
124 | 7/2/2016 | Store A | 123456789 | 3
123 | 7/3/2016 | Store B | 123456789 | 1
123 | 7/3/2016 | Store B | 958685458 | 2
为了在我们的报告工具中使用此数据,我需要使用以下格式来格式化该数据:Transaction-Location为Unique,UPC接下来为基于行号的列:
Transaction | Date | UPC 1 | UPC 2 | UPC 3
------------+-----------+-----------+----------
123-Store A | 7/2/2016 | 123456789 | 123965478 | NULL
124-Store A | 7/2/2016 | 123456789 | 123459879 | 123456789
123-Store B | 7/3/2016 | 123456789 | 958685458 | NULL
任何想法表示赞赏
标准的PIVOT可以解决问题。 您只需要在调用PIVOT之前在CTE或嵌套的Select中定义串联的Transaction列即可。
DECLARE @Table AS TABLE ([Transaction] INT, Date DATE, Location VARCHAR(15), UPC INT, LineNumber INT)
INSERT INTO @Table ([Transaction], Date, Location, UPC, LineNumber)
VALUES
(123,'7/2/2016','Store A',123456789,1)
,(123,'7/2/2016','Store A',123965478,2)
,(124,'7/2/2016','Store A',123456789,1)
,(124,'7/2/2016','Store A',123459879,2)
,(124,'7/2/2016','Store A',123456789,3)
,(123,'7/3/2016','Store B',123456789,1)
,(123,'7/3/2016','Store B',958685458,2)
;WITH cteCombineTransLocation AS (
SELECT
CAST([Transaction] AS VARCHAR(50)) + '-' + Location as [Transaction]
,Date
,UPC
,LineNumber
FROM
@Table
)
SELECT
[Transaction]
,[Date]
,[1] as UPC1
,[2] as UPC2
,[3] as UPC3
FROM
cteCombineTransLocation
PIVOT (
MAX(UPC)
FOR LineNumber IN ([1],[2],[3])
) p
如果您想要更多的UPC列,或者该数字是动态的,那么正如注释者所指出的,您可以使用动态sql,但是您仍然需要首先准备串联字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.