Sql Анализ группировки Xml - PullRequest
0 голосов
/ 13 июля 2020

Мне нужно получить разные данные строки для 1 строки на основе идентификатора и нужно сгруппировать по ее статусу.

Я пробовал несколькими способами и, наконец, нашел решение, используя xml, но когда я использую xml Я не получаю желаемого результата.

Это пример кода, который я использовал, чтобы попробовать logi c.

drop table  #TestTable
-- Create table
CREATE TABLE #TestTable (id VARCHAR(100), title VARCHAR(100), 
progress VARCHAR(100))
GO
-- Populate tableid
INSERT INTO #TestTable (id, title, progress)
SELECT '1', 'test1', 'inprogress'
UNION ALL
SELECT '1', 'test2', 'inprogress'
UNION ALL
SELECT '1', 'test3', 'completed'
UNION ALL
SELECT '1', 'test4', 'completed'

GO

SELECT id,progress, comments = STUFF((SELECT +' , '+ TITLE
    FROM #TestTable AS x2 WHERE ID = x.ID 
   
     ORDER BY ID
     FOR XML PATH(''), TYPE).value(N'(./text())[1]', N'varchar(max)'), 1, 1, '')
FROM #TestTable AS x 


GROUP BY id,progress 

возвращаемый результат:

id  progress      comments
1   completed   , test1 , test2 , test3 , test4
1   inprogress  , test1 , test2 , test3 , test4

ожидаемый результат:

id  progress     comments
1   completed   , test1 , test2 
1   inprogress  , test3 , test4

1 Ответ

0 голосов
/ 13 июля 2020

Я думаю, вам не хватает условия в вашем соединении (progress = x.progress):

SELECT id,progress, comments = STUFF((SELECT +' , '+ TITLE
    FROM #TestTable AS x2 WHERE ID = x.ID  
        and progress = x.progress  -- <-- add this 
        ORDER BY ID
     FOR XML PATH(''), TYPE).value(N'(./text())[1]', N'varchar(max)'), 1, 1, '')
FROM #TestTable AS x 
GROUP BY id,progress 

Вывод:

введите описание изображения здесь

...