2009-10-18 150 views
0

我有一个表晶格结构(高尔夫记分卡)如下: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, Y, ... Y 
LowIndex, Z, Z, Z, ... Z 
HighIndex, A, A, A, ... A 

我可以使用光标实现这一点,但有没有更好的办法?

+0

也许你能告诉我们你迄今为止编写的代码?人们通常不喜欢只为你写代码...... – 2009-10-18 07:57:58

+0

我可以使用光标方法编写但可能有其他方法吗? – dcpartners 2009-10-18 08:06:19

回答

1

TSQL直接支持pivoting。例如,看看herehere

+0

SQL2000不::( – 2009-10-18 08:17:08

+0

海报说他们在哪里使用SQL Server 2000? – 2009-10-18 08:26:03

+0

我正在使用SQL 2005 – dcpartners 2009-10-18 08:36:54

1

你可以做

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 

如果你不顾一切地摆脱光标。

确保你让所有的数据类型,通过铸造或东西是相同的。

0

明白了只有第一部分......,会做。

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 
0

完整列表:

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