Я создал следующую таблицу «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
Имеет ли это смысл, и если да, то какие функции следует использовать для получения вышеупомянутой таблицы результатов? Если у вас есть решение, пожалуйста, предоставьте его нам.
Заранее спасибо.
вы можете попробовать использовать случай, когда выражение
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
Строка 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
Мой Бог! Круто, это было легко :D Большое спасибо!!! Я только что дал агрегатным функциям псевдоним, и он работал правильно.