多行成单列

时间:2019-03-19 12:39:51

标签: sql sql-server sql-server-2008 sql-server-2012 sql-server-2014

我在表中有一个下面的数据。

enter image description here

需要如下所示的输出。

enter image description here

我尝试了以下逻辑,但是在我的情况下,那些Item#列是NVARCHAR类型的,因此MAX聚合函数的结果未知。

SELECT ID, Item1, Item2, Item3, Item4, Item5
FROM(
SELECT ID, MAX(Item1), MAX(Item2), MAX(Item3), MAX(Item4), MAX(Item5)
FROM Sample_Table WITH(NOLOCK)
) A
WHERE A.ID = '0001_11'
GROUP BY A.ID

请帮助我获得此结果。 预先感谢。

2 个答案:

答案 0 :(得分:6)

尝试使用枢轴逻辑。在这种情况下,我们要忽略值Unknown,因此下面的CASE表达式将其分配给NULL,而SUM将忽略它。

SELECT
    ID,
    MAX(CASE WHEN Item1 = 'Unknown' THEN NULL ELSE Item1 END) AS Item1,
    MAX(CASE WHEN Item2 = 'Unknown' THEN NULL ELSE Item2 END) AS Item2,
    MAX(CASE WHEN Item3 = 'Unknown' THEN NULL ELSE Item3 END) AS Item3,
    MAX(CASE WHEN Item4 = 'Unknown' THEN NULL ELSE Item4 END) AS Item4,
    MAX(CASE WHEN Item5 = 'Unknown' THEN NULL ELSE Item5 END) AS Item5,
    MAX(CASE WHEN Item6 = 'Unknown' THEN NULL ELSE Item6 END) AS Item6
FROM yourTable
GROUP BY
    ID;

答案 1 :(得分:2)

使用TRY_CAST将值转换为数字。如果无法转换该值,则TRY_CAST返回NULL。

SELECT ID,
    MAX(TRY_CAST(Item1 as INT)) AS Item1,
    MAX(TRY_CAST(Item2 as INT)) AS Item2,
    MAX(TRY_CAST(Item3 as INT)) AS Item3,
    MAX(TRY_CAST(Item4 as INT)) AS Item4,
    MAX(TRY_CAST(Item5 as INT)) AS Item5,
    MAX(TRY_CAST(Item6 as INT)) AS Item6
FROM Sample_Table WITH(NOLOCK)
GROUP BY ID;