多行合并为单列
Multiple rows into single column
我在 table 中有以下数据。
需要如下输出。
我尝试了以下逻辑,但在我的例子中,那些 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
请帮我得到这个结果。
提前致谢。
尝试使用枢轴逻辑。在这种情况下,我们要忽略值 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;
使用TRY_CAST 将值转换为数字。 TRY_CAST returns 如果无法转换该值,则为 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;
我在 table 中有以下数据。
需要如下输出。
我尝试了以下逻辑,但在我的例子中,那些 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
请帮我得到这个结果。 提前致谢。
尝试使用枢轴逻辑。在这种情况下,我们要忽略值 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;
使用TRY_CAST 将值转换为数字。 TRY_CAST returns 如果无法转换该值,则为 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;