#sql #sql-server
#sql #sql-сервер
Вопрос:
Я загрузил некоторые значения в таблицу #Temp, как показано ниже,
Select 12 as ReporterID,'<tr><td>Saravanan</td></tr>' As Body into #Temp
Insert into #Temp values(12,'<tr><td>Yogaraj</td></tr>')
Insert into #Temp values(22,'<tr><td>Daniel</td></tr>')
Insert into #Temp values(22,'<tr><td>Mathan</td></tr>')
Я хочу, чтобы вывод выглядел так,
Reporter Body
12 '<tr><td>Saravanan</td></tr>tr><td>Yogaraj</td></tr>'
22 '<tr><td>Daniel</td></tr>tr><td>Mathan</td></tr>'
Я попытался преобразовать приведенный ниже код в xml. но я хочу его в html.
SELECT DISTINCT tttm.ReporterID
, STUFF((
SELECT ',' t.Body
FROM #Temp T
WHERE T.ReporterID = tttm.ReporterID
FOR XML PATH('table')
), 1, 1, '') AS tags_title
--into #XML
from #Temp tttm
кто-нибудь, пожалуйста, помогите мне найти решение. Заранее спасибо.
Комментарии:
1. sql server v17.9.1
Ответ №1:
Примечание: Это, вероятно, не лучшее решение, но я считаю, что оно выполняет то, что вы хотите.
Что вы можете сделать, так это создать вложенный запрос: внешний запрос группируется по ReporterID
, а внутренний запрос выдает вам нужный XML. Это похоже на вашу попытку. Но с моим решением я td
удаляю текст, а затем помещаю его обратно в требуемые элементы в FOR XML
части запроса:
SELECT
ReporterID,
(
SELECT Body.query('//td/text()') AS td
FROM @tmp AS t2
WHERE t2.ReporterID = t1.ReporterID
FOR XML PATH('tr'), ROOT('table')
) AS combined_body
FROM @tmp AS t1
GROUP BY ReporterID
;
здесь работает скрипка.