Я хотел бы разделить результат запроса и отобразить значения в отдельных столбцах. В качестве примера я получаю следующий результат
|Name |
|ABC_DEFG_HIJKL|
|A_B_C |
|A_B_C_D |
Я хочу разделить значения на «_» и добавить их в отдельные столбцы. Результат запроса должен выглядеть примерно так
|Name |first |second |third |fourth|
|ABC_DEFG_HIJKL|ABC |DEFG |HIJKL |null |
|A_B_C |A |B |C |null |
|A_B_C_D |A |B |C |D |
Пока могу разделить результат. Но для каждого значения у меня есть новая строка. Поэтому мне просто нужно объединить результаты в одну строку и создать столбец для каждой из этих строк.
SELECT DP.Name, value
FROM RitopDatenpunkt DP
CROSS APPLY STRING_SPLIT(DP.Name, '_');
|Name |value |
|ABC_DEFG_HIJKL|ABC |
|ABC_DEFG_HIJKL|DEFG |
|ABC_DEFG_HIJKL|HIJKL |
|A_B_C |A |
|A_B_C |B |
|A_B_C |C |
|A_B_C_D |A |
|A_B_C_D |B |
|A_B_C_D |C |
|A_B_C_D |D |
Я знаю, что должен использовать PIVOT. Но какую агрегирующую функцию я использую и являются ли аргументы для оператора FOR правильными?
SELECT DP.Name, value
FROM RitopDatenpunkt DP
CROSS APPLY STRING_SPLIT(DP.Name, '_')
PIVOT
(
GROUPING(Name) as Name
FOR value in ([first],[second],[third],[fourth])
)piv;