我有3列的表,代表一个矩阵:表的SQL Select语句2008
i j val
-------
1 1 1
1 2 12
1 3 4
2 1 3
2 2 4
2 3 4
3 1 0
3 2 2
3 3 2
我怎么会以这样的方式选择这个表,我得到
a1 a2 a3
-------
1 12 4
3 4 4
0 2 2
有一种使用枢轴的方式,或者这将是最好的方法?
我有3列的表,代表一个矩阵:表的SQL Select语句2008
i j val
-------
1 1 1
1 2 12
1 3 4
2 1 3
2 2 4
2 3 4
3 1 0
3 2 2
3 3 2
我怎么会以这样的方式选择这个表,我得到
a1 a2 a3
-------
1 12 4
3 4 4
0 2 2
有一种使用枢轴的方式,或者这将是最好的方法?
SELECT [1] AS a1,
[2] AS a2,
[3] AS a3
FROM T
PIVOT (MAX(val) FOR j IN ([1],[2],[3])) AS P
我知道我有点迟到了,但是这不就是更接近你在找什么:
SELECT [1] as a1, [2] as a2, [3] as a3
FROM
(
SELECT i, j, val
FROM T) AS source
PIVOT
(
MAX(val)
FOR j IN ([1], [2], [3])
) as pvt
此外,this link讨论代列的动态。
祝你好运!
马特
@Matt有什么区别...请稍等解释一下吗? – cMinor
马丁史密斯的查询工作,但它给了每一个值的行(除非我做了不正确的事情)。所以你最终得到九行a1,a2和a3。我上面发布的查询返回的结果就是您在问题中输入的内容(3行)。 –
@MatthewPatrickCashatt - 你一定做得不对。就像在测试表中添加一个多余的列一样。 [在线演示](http://data.stackexchange.com/stackoverflow/query/59767) –
对不起,并让假设我有行数(在本例中为9),有没有一种方法,使你的伟大代码中的动态版本? – cMinor
@cMinor - 是的。我敢肯定[你以前的问题的答案之一](http://stackoverflow.com/search?q=user%3A265519+sql-server+dynamic&submit=search)应该让你开始。 –