Несколько строк в один столбец - PullRequest
4 голосов
/ 19 марта 2019

У меня есть данные ниже в таблице.

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 ]

6 голосов
/ 19 марта 2019

Попробуйте использовать сводную логику. В этом случае мы хотим игнорировать значение 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;
2 голосов
/ 19 марта 2019

Используйте 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;
...