如何使用SQL Server在静态/动态数据透视查询中将两列合并为单列

时间:2018-07-09 06:59:48

标签: sql sql-server tsql

我有一个这样的模式

demo(month_year(navarchar),datecount(int),destination(nvarchar),type(nvarchar))。

在输出中,我想将行转换为具有串联列的列。

datecount  |  Month_year   | destination   type  
-------------------------+---------------+-------------------
07         | March - 18    | ABC          No
23         | August - 2018 | ABC          No
29         | August - 2018 | XYZ          Sold Out 
04         | July - 2018   | PQR          Sold Out
10         | July - 2018   | XYZ          No
25         | July - 2018   | ABC          Sold Out 

在我想要的输出中,

Month_Year      1                 2                 3 ...     
July - 2018     04(Sold Out-PQR)  10(No-XYZ)        25(Sold Out-ABC)
August - 2018   23(No-ABC)        29(Sold Out-XYZ) 

我已经尝试使用PIVOTE函数。面对该问题,以显示日期计数与目标和类型的组合(按预期输出)。但是无法解决。请帮我。

1 个答案:

答案 0 :(得分:1)

只需将值连接起来再进行透视即可。

;WITH ToPivot AS
(
    SELECT
        D.month_year,
        ConcatenatedValues = CONVERT(VARCHAR(10), D.datecount) + '(' + D.type + '-' + D.destination + ')',
        NumberToPivot = ROW_NUMBER() OVER (PARTITION BY D.month_year ORDER BY D.datecount ASC)
    FROM
        Demo AS D
)
SELECT
    P.*
FROM
    ToPivot AS T
    PIVOT (
        MAX(T.ConcatenatedValues)
        FOR T.NumberToPivot IN (
            [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], 
            [11], [12], [13], [14], [15], [16], [17], [18], [19], 
            [20], [21], [22], [23], [24], [25], [26], [27], [28], 
            [29], [30], [31])
    ) AS P