从X,Y,Z列创建SQL视图

时间:2016-02-02 16:25:51

标签: sql sql-server sql-server-2008

我有一个包含3列的表:X,Y,Z。

X和Y将包含整数列表,Z将包含一些文本。

For Instance

X Y  Z
1 1 'A'
1 2 'B'
2 1 'C'
2 2 'D'
3 1 'E'
3 2 'F'

我想将值显示在Matrix中,因此它看起来像这样

A B
C D
E F

X和Y中的值可以变化,例如X将包含值1到6,Y将是1到5,但是应该有30个条目(即5 * 6 = 30),但我想处理缺少条目的情况。

我该如何做到这一点并优雅地将其存储在视图中?

更新:这需要在不知道X和Y值的情况下提前完成,因为它可能会改变,但只会有这么多列

2 个答案:

答案 0 :(得分:2)

基本上,您要做的是pivot表:

SELECT x, [1], [2], [3], [4], [5]
  FROM (SELECT x, y, z FROM myTable) AS source
 PIVOT (MIN(z) FOR [y] IN ([1], [2], [3], [4], [5])) AS pivoted

应该(未经测试)产量:

x 1 2 3 4 5
-----------
1 A B
2 C D
3 E F

(缺少值包含NULL)。

请注意,您需要修复 SQL返回的列数,因此如果未使用,则无法跳过第3-5列。换句话说,如果y的最大值未知,则不可能使用(静态)SQL执行此操作。

添加numbers table的缺失行作为练习。

答案 1 :(得分:0)

select t1.z, t2.z 
from table t1 
join table t2 
      on t1.x = t2.x 
     and t1.y = 1
     and t2.y = 2