Tsql 查询数据透视

Tsql 查询数据透视,tsql,Tsql,我有一张桌子结构(高尔夫记分卡),如下所示: HoleID int CourseID int Par INT Distance INT LowIndex INT HighIndex INT Sequence INT (representing the sequence of the hole: 1, 2, 3, ... 18) 这门课有18个洞 我想转向: Hole, 1, 2, 3, ... 18 Par, X, X, X, ... X Distance, Y, Y,

我有一张桌子结构(高尔夫记分卡),如下所示:

HoleID int
CourseID int
Par INT
Distance INT
LowIndex INT
HighIndex INT
Sequence INT (representing the sequence of the hole: 1, 2, 3, ... 18)
这门课有18个洞

我想转向:

Hole,      1, 2, 3, ... 18
Par,       X, X, X, ... X
Distance,  Y, Y, Y, ... Y
LowIndex,  Z, Z, Z, ... Z
HighIndex, A, A, A, ... A

我可以通过使用游标来实现这一点,但有没有更好的方法?

TSQL直接支持旋转。看一看,例如。

你可以这样做

SELECT HoleID FROM Card WHERE  HoleId =1 ,(SELECT  HoleID   FROM Card WHERE  HoleId =2) , -- etc  

UNION
SELECT Par FROM Card WHERE HoleId = 1, (SELECT Par FROM Card where HoleID=2). --etc
UNION
SELECT Distance FROM Card WHERE HoleId = 1, (SELECT Distance FROM Card where HoleID=2). --etc
UNION
SELECT LowIndex FROM Card WHERE HoleId = 1, (SELECT LowIndex FROM Card where HoleID=2). --etc
UNION
SELECT HIghIndex FROM Card WHERE HoleId = 1, (SELECT HighIndex FROM Card where HoleID=2). --etc
如果你非常想摆脱光标


确保通过强制转换或其他方式使所有数据类型都相同。

仅在第一部分中得到了它。。。那就行了

select [1],[2],[3],[4],[5],[6],[7],[8],[9], [10], [11], [12], [13], [14], [15], [16], [17], [18]
from (Select Sequence, Par FROM holes WHERE CourseID=1) a

PIVOT 
(
    Max(Par)
    FOR [Sequence] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9], [10], [11], [12], [13], [14], [15], [16], [17], [18])

) AS p
完整列表:

select 'Par', [1],[2],[3],[4],[5],[6],[7],[8],[9], [10], [11], [12], [13], [14], [15], [16], [17], [18]
from (Select Sequence, Par FROM holes WHERE CourseID=1) a

PIVOT 
(
    Max(Par)
    FOR [Sequence] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9], [10], [11], [12], [13], [14], [15], [16], [17], [18])

) AS p

UNION

select 'Distance', [1],[2],[3],[4],[5],[6],[7],[8],[9], [10], [11], [12], [13], [14], [15], [16], [17], [18]
from (Select Sequence, Distance FROM holes WHERE CourseID=1) a

PIVOT 
(
    Max(Distance)
    FOR [Sequence] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9], [10], [11], [12], [13], [14], [15], [16], [17], [18])

) AS p

UNION


select 'LowIndex', [1],[2],[3],[4],[5],[6],[7],[8],[9], [10], [11], [12], [13], [14], [15], [16], [17], [18]
from (Select Sequence, LowIndex FROM holes WHERE CourseID=1) a

PIVOT 
(
    Max(LowIndex)
    FOR [Sequence] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9], [10], [11], [12], [13], [14], [15], [16], [17], [18])

) AS p

UNION

select 'HighIndex', [1],[2],[3],[4],[5],[6],[7],[8],[9], [10], [11], [12], [13], [14], [15], [16], [17], [18]
from (Select Sequence, HighIndex FROM holes WHERE CourseID=1) a

PIVOT 
(
    Max(HighIndex)
    FOR [Sequence] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9], [10], [11], [12], [13], [14], [15], [16], [17], [18])

) AS p

也许你可以给我们看看你写的代码?人们通常不喜欢只为您编写代码……我可以使用游标方法编写代码,但可能还有其他方法?海报上说他们在哪里使用SQL Server 2000?