2015-07-22 5 views
0

Может ли кто-нибудь помочь мне. Вот как я храню записи в одной из таблиц SQL Server.
Как использовать Pivot/UnPivot для представления данных из таблицы ниже в ожидаемом формате, показанном ниже. Заранее спасибо.SQL Server Pivot Data

<p>Table - Scores</p> 
 
<table> 
 
<tbody> 
 
<tr> 
 
<td>Name</td> 
 
<td>Mode</td> 
 
<td>&nbsp;Game</td> 
 
</tr> 
 
<tr> 
 
<td>Player A</td> 
 
<td>&nbsp;Easy</td> 
 
<td>&nbsp;Game 1</td> 
 
</tr> 
 
<tr> 
 
<td>Player A</td> 
 
<td>&nbsp;Easy</td> 
 
<td>&nbsp;Game 1</td> 
 
</tr> 
 
<tr> 
 
<td>Player A</td> 
 
<td>&nbsp;Easy</td> 
 
<td>&nbsp;Game 2</td> 
 
</tr> 
 
<tr> 
 
<td>Player B</td> 
 
<td>&nbsp;Easy</td> 
 
<td>&nbsp;Game 1</td> 
 
</tr> 
 
<tr> 
 
<td>Player B</td> 
 
<td>&nbsp;Medium</td> 
 
<td>&nbsp;Game 1</td> 
 
</tr> 
 
<tr> 
 
<td>Player C</td> 
 
<td>&nbsp;Easy</td> 
 
<td>&nbsp;Game 1</td> 
 
</tr> 
 
<tr> 
 
<td>Player C</td> 
 
<td>&nbsp;Easy</td> 
 
<td>&nbsp;Game 2</td> 
 
</tr> 
 
<tr> 
 
<td>Player C</td> 
 
<td>&nbsp;Medium</td> 
 
<td>&nbsp;Game 2</td> 
 
</tr> 
 
</tbody> 
 
</table> 
 
<p></p> 
 
<p>Result after Pivot counts.</p> 
 
<table> 
 
<tbody> 
 
<tr> 
 
<td>Game</td> 
 
<td>&nbsp;Mode</td> 
 
<td>Player A</td> 
 
<td>&nbsp;Player B</td> 
 
<td>&nbsp;Player C</td> 
 
</tr> 
 
<tr> 
 
<td>Game 1</td> 
 
<td>&nbsp;Easy</td> 
 
<td>&nbsp;2</td> 
 
<td>&nbsp;1</td> 
 
<td>&nbsp;1</td> 
 
</tr> 
 
<tr> 
 
<td>Game 1</td> 
 
<td>&nbsp;Medium</td> 
 
<td>&nbsp;0</td> 
 
<td>&nbsp;1</td> 
 
<td>&nbsp;0</td> 
 
</tr> 
 
<tr> 
 
<td>Game 2</td> 
 
<td>&nbsp;Easy</td> 
 
<td>&nbsp;1</td> 
 
<td>&nbsp;0</td> 
 
<td>&nbsp;1</td> 
 
</tr> 
 
<tr> 
 
<td>Game 2</td> 
 
<td>&nbsp;Medium</td> 
 
<td>&nbsp;0</td> 
 
<td>&nbsp;0</td> 
 
<td>&nbsp;1</td> 
 
</tr> 
 
</tbody> 
 
</table>

+0

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

+0

Согласен .. !! сначала нужно по крайней мере Google, прежде чем поставить вопрос. Не следует ловить корма –

ответ

0

Вы можете сделать это с помощью Dynamic Crosstab:

SQL Fiddle

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

SELECT @sql1 = 
'SELECT 
    Game 
    , Mode' + CHAR(10) 

SELECT @sql2 = @sql2 + 
' , SUM(CASE WHEN Name = ''' + Name + ''' THEN 1 ELSE 0 END) AS ' + QUOTENAME(Name) + CHAR(10) 
FROM(
    SELECT DISTINCT Name FROM Scores 
)t 
ORDER BY Name 

SELECT @sql3 = 
'FROM Scores 
GROUP BY Game, Mode 
ORDER BY Game, Mode' 

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

Это может быть сделано с помощью PIVOT. Ниже запрос -

SELECT [Game],[Mode],[Player A],[Player B],[Player C] 
FROM 
(
SELECT Name,Mode,Game 
FROM <TABLENAME>) AS SourceTable 
PIVOT(
COUNT(Name) FOR Name IN ([Player A],[Player B],[Player C]) 
) AS PivotTable;