Как я могу объединить значения для каждого отдельного ключа в таблице сопоставлений? - PullRequest
2 голосов
/ 30 апреля 2011

Я пытаюсь сжать таблицу сопоставлений в составную строку 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 Ответ

1 голос
/ 30 апреля 2011

Присоединитесь к внешней 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...