#tsql
#tsql
Вопрос:
Я пытаюсь преобразовать таблицу сопоставлений в объединенную строку XML. По сути, я хочу взять эту таблицу:
Old_Key Old_Value
1 'a'
1 'b'
1 'c'
2 'd'
2 'e'
И вставьте это так, чтобы значения в col2 были преобразованы в XML-строку для каждого значения в Col1, вот так:
New_Key New_Value
1 <vals><val>a</val><val>b</val><val>c</val><vals>
2 <vals><val>d</val><val>e</val></vals>
Мой текущий код конкатенации:
INSERT INTO New_Table (New_Key, New_Value)
SELECT DISTINCT(Old_Key), (SELECT Old_Value AS val FROM Old_Table FOR XML PATH(''), ROOT('vals')) FROM Old_Table
Этот код не работает, поскольку все Old_Values объединяются вместе. Как я могу убедиться, что только Old_Values, которые используют один и тот же ключ, объединяются вместе? Дайте мне знать, если я могу сделать что-нибудь еще, чтобы прояснить мою ситуацию. Спасибо!
Ответ №1:
Объедините с внешней Old_Table во вложенном запросе и используйте group by
вместо distinct
.
select
O1.Old_Key,
(select Old_Value as val
from Old_Table as O2
where O1.Old_Key = O2.Old_Key
for xml path(''), root('vals'), type) as Keys
from Old_Table as O1
group by O1.Old_Key
Результат
Old_Key Keys
------- -------------------------------------------------
1 <vals><val>a</val><val>b</val><val>c</val></vals>
2 <vals><val>d</val><val>e</val></vals>