Кэшировать SQL-запрос для создания 1 строки из нескольких записей - PullRequest
0 голосов
/ 29 октября 2018

У меня есть запись ниже, и я хотел бы создать запись в 1 строку. Я пробовал STUFF, FOR XML PATH и не работал

+-----------+-------+---------+
| CLIENT_ID | Event | DX_Code |
+-----------+-------+---------+
|        54 |     5 | F45.72  |
|        54 |     5 | X45.34  |
|        54 |     5 | M98.32  |
+-----------+-------+---------+

Выход = 54,5, F45,72 X45,34 M98,32

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Это должно дать вам ожидаемый результат

SELECT      CAST(t1.CLIENT_ID AS VARCHAR) + ','+ CAST(t1.Event AS VARCHAR)+ ','+
            STUFF((    SELECT ' ' + t2.DX_Code AS [text()]

                        FROM #temp t2
                        WHERE
                        t2.CLIENT_ID = t1.CLIENT_ID
                        and       t2.Event = t1.Event
                        FOR XML PATH('')
                        ), 1, 1, '' )

            AS OutputText
FROM  #temp t1
GROUP BY t1.CLIENT_ID,t1.Event

Выход:

54,5,F45.72 X45.34 M98.32
0 голосов
/ 29 октября 2018

Вы можете сделать это, используя STUFF() с FOR XML PATH('') как

CREATE TABLE T
    ([CLIENT_ID] int, [Event] int, [DX_Code] varchar(6))
;

INSERT INTO T
    ([CLIENT_ID], [Event], [DX_Code])
VALUES
    (54, 5, 'F45.72'),
    (54, 5, 'X45.34'),
    (54, 5, 'M98.32')
;

SELECT DISTINCT T1.[CLIENT_ID],
                T1.[Event],
                STUFF(
                        (
                          SELECT ',' + T2.[DX_Code] 
                          FROM T T2
                          WHERE T2.[CLIENT_ID] = T1.[CLIENT_ID]
                                AND T2.[Event] = T1.[Event]
                          FOR XML PATH ('')
                        ) , 1, 1, ''
                    ) Result
FROM T T1;
...