Чтобы получить результат, вам нужно сделать это в два этапа. Во-первых, вам нужно будет объединить все PlayerNames
для каждого Position
. После того, как у вас есть список, вы можете сворачивать данные из строк в столбцы.
Поскольку вы используете SQL Server, существует несколько различных способов объединения данных. Вы можете использовать STUFF
и FOR XML PATH
:
select t1.position,
STUFF(
(SELECT ', ' + t2.PlayerName
FROM yourtable t2
where t1.position = t2.position
FOR XML PATH (''))
, 1, 1, '') AS PlayerName
from yourtable t1
См SQL Fiddle with Demo. Это получает данные в результат:
| POSITION | PLAYERNAME |
|----------|---------------|
| Forward | Tom, John |
| Center | Dave, Bob |
| Defense | Harry, James |
Теперь, когда данные были сцеплены, то вы можете преобразовать данные с помощью агрегатной функции с помощью выражения CASE, или вы можете использовать PIVOT.
Совокупные с ДЕЛУ:
;with cte as
(
select t1.position,
STUFF(
(SELECT ', ' + t2.PlayerName
FROM yourtable t2
where t1.position = t2.position
FOR XML PATH (''))
, 1, 1, '') AS PlayerNames
from yourtable t1
)
select
max(case when position = 'Forward' then PlayerNames end) Forward,
max(case when position = 'Center' then PlayerNames end) Center,
max(case when position = 'Defense' then PlayerNames end) Defense,
max(case when position = 'Goalie' then PlayerNames end) Goalie
from cte
См SQL Fiddle with Demo
Pivot:
;with cte as
(
select t1.position,
STUFF(
(SELECT ', ' + t2.PlayerName
FROM yourtable t2
where t1.position = t2.position
FOR XML PATH (''))
, 1, 1, '') AS PlayerName
from yourtable t1
)
select Forward, Center, Defense, Goalie
from cte
pivot
(
max(playername)
for position in (Forward, Center, Defense, Goalie)
) piv;
См SQL Fiddle with Demo.
Оба дают результат:
| FORWARD | CENTER | DEFENSE | GOALIE |
|------------|------------|---------------|------------|
| Tom, John | Dave, Bob | Harry, James | Mike, Tim |
вы пытались написать запрос, чтобы сделать это? Вы действительно должны продемонстрировать свои попытки решить эту проблему. – Taryn
Это не просто свод, вы также объединяете потенциальные строки. –
Попробуйте использовать sqlfiddle.com для этого примера - это поможет вам и тем, кто пытается вам помочь. – eebbesen