Выберите несколько значений в столбце, идентифицированном уникальным идентификатором, и проанализируйте их в строку

Я создал следующую таблицу «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

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

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
42
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

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

Мой Бог! Круто, это было легко :D Большое спасибо!!! Я только что дал агрегатным функциям псевдоним, и он работал правильно.

Georg Spornraft 09.04.2019 10:50

Строка 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

Попробуй это

;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

Другие вопросы по теме