2015-06-25 3 views
0

Я ищу способ преобразования строк в таблицу в строки столбцов и назначение имен столбцов для каждого.Преобразование строк в строки столбцов в SQL Server

Players Id Team 
john 1 t1 
carmel 1 t1 
jack 1 t1 
james 1 t1 

Изменен:

Id Team p1 p2  p3  p4 
1 t1 john carmel jack james 

Там может быть любое количество игроков в приведенном выше примере. Я пробовал использовать шарнир. Я мог бы изменить строки на столбцы, но не в том порядке, который я ищу.

+0

Всегда '4' игроков? для каждой команды? –

+2

Пожалуйста, добавьте свой опорный запрос к вопросу. – sqluser

+0

Возможный дубликат [Преобразование строк в столбцы с использованием «Pivot» в SQL Server] (http://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot-in-sql-server) –

ответ

3

Вот один из способов использования динамической кросс-таблицы. Прочтите это article Джеффом Моденом для получения более подробной информации.

DECLARE @sql1 VARCHAR(4000) = '' 
DECLARE @sql2 VARCHAR(4000) = '' 
DECLARE @sql3 VARCHAR(4000) = '' 

SELECT @sql1 = 
'SELECT 
    Id 
    , Team 
' 

SELECT @sql2 = @sql2 + 
' , MAX(CASE WHEN RN = ' + CONVERT(VARCHAR(10), RN) + ' THEN Players END) AS [' + CONVERT(VARCHAR(10), RN) + ']' + CHAR(10) 
FROM(
    SELECT DISTINCT 
     RN = ROW_NUMBER() OVER(PARTITION BY Id, Team ORDER BY (SELECT NULL)) 
    FROM Tbl 
)t 
ORDER BY RN 

SELECT @sql3 = 
'FROM(
    SELECT *, 
     RN = ROW_NUMBER() OVER(PARTITION BY Id, Team ORDER BY (SELECT NULL)) 
    FROM Tbl 
)t 
GROUP BY 
Id, Team' 

PRINT (@sql1 + @sql2 + @sql3) 
EXEC (@sql1 + @sql2 + @sql3) 

SQL Fiddle

Смежные вопросы