0

我有一个表格,其中包含如下数据:

A1 FID A2
0 0 39
1 0 23
0 1 16
1 1 64
2 1 12
0 2 76
0 3 11
0 4 87

我想创建一个列出这个的视图:

FID Col0 Col1 Col2
0 39 23 空
1 16 64 12
2 76 空空
3 11 null null
4 87 空空

这在 T-SQL 中怎么可能实现?

4

1 回答 1

1

你可以使用这样的东西:

SELECT  FID,
        Col0 = MAX(CASE WHEN A1 = 0 THEN A2 END),
        Col1 = MAX(CASE WHEN A1 = 1 THEN A2 END),
        Col2 = MAX(CASE WHEN A1 = 2 THEN A2 END)
FROM    T
GROUP BY FID;

或者你可以使用PIVOT

SELECT  pvt.FID, 
        [Col0] = pvt.[0],
        [Col1] = pvt.[1],
        [Col2] = pvt.[2]
FROM    T
        PIVOT
        (   MAX(A2)
            FOR A1 IN ([0], [1], [2])
        ) pvt

SQL Fiddle 上两者的示例

如果 A1 的值数量未知,因此列数未知,则无法在视图中执行此操作。您将需要使用动态 SQL,尽管这通常在应用程序层而不是 SQL-Server 本身中处理得更好

于 2013-09-30T16:15:21.923 回答