简体   繁体   English

多记录到一行

[英]Multiple Records to one Row

I need to transform this given table: 我需要转换给定的表:

ArticleId  | SymbolId
-----------+----------
1          | 1
1          | 2
1          | 3
2          | 6
2          | 7
2          | 3
2          | 4
2          | 5

into another table like this: 放入另一个这样的表中:

ArticleId  |  Symbol1  | Symbol2  | Symbol3  | Symbol4  | Symbol5
-----------+-----------+----------+----------+----------+---------
1          |  1        | 2        | 3        | NULL     | NULL
2          |  6        | 7        | 3        | 4        | 5

Is there an easy way to do this? 是否有捷径可寻? There are always max 5 records per ArticleId . 每个ArticleId始终最多有5条记录。 No special order is required. 无需特殊订购。

You could use MAX(CASE WHEN END) : 您可以使用MAX(CASE WHEN END)

;WITH YourTable(ArticleId, SymbolId) AS(
    SELECT 1, 1 UNION ALL
    SELECT 1, 2 UNION ALL
    SELECT 1, 3 UNION ALL
    SELECT 2, 6 UNION ALL
    SELECT 2, 7 UNION ALL
    SELECT 2, 3 UNION ALL
    SELECT 2, 4 UNION ALL
    SELECT 2, 5 
)
SELECT
    ArticleId,
    Symbol1 = MAX(CASE WHEN RN = 1 THEN SymbolId END),
    Symbol2 = MAX(CASE WHEN RN = 2 THEN SymbolId END),
    Symbol3 = MAX(CASE WHEN RN = 3 THEN SymbolId END),
    Symbol4 = MAX(CASE WHEN RN = 4 THEN SymbolId END),
    Symbol5 = MAX(CASE WHEN RN = 5 THEN SymbolId END)
FROM(
    SELECT *,
        RN = ROW_NUMBER() OVER(PARTITION BY ArticleId ORDER BY (SELECT NULL))
    FROM YourTable
)t
GROUP BY ArticleId

Using PIVOT 使用PIVOT

;WITH YourTable(ArticleId, SymbolId) AS(
    SELECT 1, 1 UNION ALL
    SELECT 1, 2 UNION ALL
    SELECT 1, 3 UNION ALL
    SELECT 2, 6 UNION ALL
    SELECT 2, 7 UNION ALL
    SELECT 2, 3 UNION ALL
    SELECT 2, 4 UNION ALL
    SELECT 2, 5 
)
SELECT
    ArticleId,
    Symbol1 = [1], 
    Symbol2 = [2], 
    Symbol3 = [3], 
    Symbol4 = [4], 
    Symbol5 = [5]
FROM (
    SELECT *,
        RN = ROW_NUMBER() OVER(PARTITION BY ArticleId ORDER BY (SELECT NULL))
    FROM YourTable
)t
PIVOT (
    MAX(t.SymbolId)
    FOR RN IN ([1], [2], [3], [4], [5])
)p

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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