如何在SQL中简单地使用行切换列?是否有任何简单的转置命令?
即转此结果:
Paul | John | Tim | Eric
Red 1 5 1 3
Green 8 4 3 5
Blue 2 2 9 1
Run Code Online (Sandbox Code Playgroud)
进入这个:
Red | Green | Blue
Paul 1 8 2
John 5 4 2
Tim 1 3 9
Eric 3 5 1
Run Code Online (Sandbox Code Playgroud)
PIVOT
这种情况看起来太复杂了.
可能重复:
SQL Server动态PIVOT查询?
是否可以对下表执行查询:
Game Player Goals
----- ------ ------
Game1 John 1
Game1 Paul 0
Game1 Mark 2
Game1 Luke 1
Game2 John 3
Game2 Paul 1
Game2 Luke 1
Game3 John 0
Game3 Mark 2
Run Code Online (Sandbox Code Playgroud)
结果如下:
Game John Paul Mark Luke
----- ---- ---- ---- ----
Game1 1 0 2 1
Game2 3 1 - 1
Game3 0 - 2 -
Run Code Online (Sandbox Code Playgroud)
它将每个不同的玩家变成一列,并将游戏分组,从而为每个玩家每个游戏提供目标。
假设我在同一个表中有以下两列
Column 1
--------
1
2
3
Column 2
--------
4
5
6
Run Code Online (Sandbox Code Playgroud)
我如何得到一个给我的结果:
Columns
--------
1
2
3
4
5
6
Run Code Online (Sandbox Code Playgroud)
编辑
我真正想要的是确保没有更有效的方法在同一个表中的多个列上键入联合查询,而不必多次重复哪个表并多次重复每个联合的where条件.
实际查询看起来更像是这样的:
WITH T1 AS
( SELECT [Col1] FROM [Table1]
)
SELECT * FROM (
SELECT [Cols1-100], COUNT(*) as "Count" FROM (
SELECT [Col-1] FROM [Table2] AS [Cols1-100], [T1]
WHERE [Table2].[Col-1] = [T1].[Col-1]
AND [Col-1] != '2' AND [Col-2] != '2' ..... etc ..... AND [Col-100] != '2'
UNION ALL
SELECT [Col-2] FROM [Table2] AS [Cols1-100], [T1] …
Run Code Online (Sandbox Code Playgroud)