2012-01-09 172 views
0

我有一个存储过程中,我想返回结果集看起来像这样:分组结果集数据

id | student | term1 | term2 

的问题是,数据不存储这样的分贝。因此,查询将生成一个看起来像这样的结果集:

id | student | termNo | termValue 
1 | lorem | 1  | someValue 
2 | ipsum | 2  | anotherValue 

是否有任何简单的方法来转换此。结果集很大,所以我不想做出几个明显的解决方案。

希望这是可以理解的=)

+0

方面有多少....你想要它是动态的吗? – Lamak 2012-01-09 18:21:16

+0

4方面存在,不必是动态的 – johan 2012-01-09 18:24:32

回答

3

好,根据你的意见,你可以这样做:

SELECT id, 
     student, 
     MIN(CASE WHEN termNo = 1 THEN termValue END) term1, 
     MIN(CASE WHEN termNo = 2 THEN termValue END) term2, 
     MIN(CASE WHEN termNo = 3 THEN termValue END) term3, 
     MIN(CASE WHEN termNo = 4 THEN termValue END) term4 
FROM YourTable 
GROUP BY id, student 

SELECT id, student, [1] AS Term1, [2] AS Term2, [3] AS Term3, [4] AS Term4 
FROM YourTable T 
PIVOT(MIN(termValue) FOR termNo IN ([1],[2],[3],[4])) AS PT 
+0

请更正“termNo = 1”语句,以反映正确的值(1,2,3,4)。虽然第一个代码段可能很丑(对不起),但它确实可以保证更高效的查询。 – 2012-01-09 20:25:59

+0

@Norla - 哎呀,显然我遭受了ctrl + c ctrl + v的糟糕情况。感谢您的评论。 – Lamak 2012-01-09 20:31:09