Выберите несколько значений в столбце, идентифицируемых уникальным идентификатором, и разберите их в строку - PullRequest
1 голос
/ 09 апреля 2019

Я создал следующую таблицу «MyTable»:

 ID          StrValue            SortID 
 130030      12345678            2 
 130030      Huber               3 
 130030      Georg Hans          5 
 130801      11223344            2 
 130801      Schreiner           3 
 130801      Peter               5 
 131244      87654321            2 
 131244      Schneider           3 
 131244      Hans                5 

Я хочу написать SQL для получения данных в этом формате / выбрать:

Result
12345678, Huber Georg Hans
11223344, Schreiner Peter
87654321, SChneider Hans

Делает ли этосмысл и если да, какие функции следует использовать, чтобы получить вышеупомянутую таблицу результатов?Если у вас есть решение, пожалуйста, предоставьте его нам.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 09 апреля 2019

вы можете попробовать использовать случай, когда выражение

SELECT id,
   max(case when sortid=2 then StrValue end),
   max(case when sortid=3 then StrValue end),
   max(case when sortid=5 then StrValue end)
FROM tablename
GROUP BY id
0 голосов
/ 09 апреля 2019

Попробуйте это

;WITH CTE(ID,StrValue,SortID )
AS
(
SELECT 130030,'12345678'  ,2 UNION ALL
SELECT 130030,'Huber'     ,3 UNION ALL
SELECT 130030,'Georg Hans',5 UNION ALL
SELECT 130801,'11223344'  ,2 UNION ALL
SELECT 130801,'Schreiner' ,3 UNION ALL
SELECT 130801,'Peter'     ,5 UNION ALL
SELECT 131244,'87654321'  ,2 UNION ALL
SELECT 131244,'Schneider' ,3 UNION ALL
SELECT 131244,'Hans'      ,5 
)
,Cte2
AS
(
SELECT ID,StrValue,
        CAST(CASE WHEN ISNUMERIC(StrValue) >0 
        THEN StrValue ELSE NULL END AS INT) AS StrValueNumeric ,
        SortID
FROM CTE
)
,CTE_Final
AS
(
 SELECT ID,SortID,StrValue,
        CASE WHEN StrValueNumeric IS NOT NULL THEN StrValueNumeric
 ELSE (SELECT  MAX(StrValueNumeric) 
        FROM Cte2
        WHERE StrValueNumeric IS NOT NULL 
            AND id = o.id 
        )END AS StrValueNumeric
FROM Cte2 o
)
SELECT DISTINCT
LTRIM(STUFf((SELECT ',  ' + StrValue 
                    FROM CTE_Final i 
                    WHERE i.StrValueNumeric = o.StrValueNumeric
                    FOR XML PATH ('')),1,1,'')) As StrValue
FROM CTE_Final o

Результат

ReqFormat
-----------------------------
11223344,  Schreiner,  Peter
12345678,  Huber,  Georg Hans
87654321,  Schneider,  Hans
0 голосов
/ 09 апреля 2019

CSV-строка, используемая для XML-метода

 select Result = stuff( 
        (
            select  ',' + x.StrValue
            from    YourTable x
            where   x.ID    = t.ID
            order by x.SortID
            for xml path('')
        ), 1, 1, '')
from    YourTable t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...