繁体   English   中英

在SQL中合并和透视数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM