4

在 sql server 2008 中,我有一个包含 [a]、[b]、[c]、[sort] 列的表,它有 4 条记录:

1,      NULL,  NULL    0
NULL,   2,     NULL    1
NULL,   NULL,  3       2
10,     NULL,  NULL    3

我需要以一种我得到一行的方式组合所有行,并且对于每一列我得到第一个(按排序列排序)非空值。所以我的结果应该是:

1,      2,     3

谁能建议如何做到这一点?谢谢

4

1 回答 1

7

单程

SELECT (SELECT TOP 1 [a]
        FROM   @T
        WHERE  [a] IS NOT NULL
        ORDER  BY [sort]) AS [a],
       (SELECT TOP 1 [b]
        FROM   @T
        WHERE  [b] IS NOT NULL
        ORDER  BY [sort]) AS [b],
       (SELECT TOP 1 [c]
        FROM   @T
        WHERE  [c] IS NOT NULL
        ORDER  BY [sort]) AS [c] 

或其他

;WITH R
     AS (SELECT [a],
                [b],
                [c],
                [sort]
         FROM   @T
         WHERE  [sort] = 0
         UNION ALL
         SELECT Isnull(R.[a], T.[a]),
                Isnull(R.[b], T.[b]),
                Isnull(R.[c], T.[c]),
                T.[sort]
         FROM   @T T
                JOIN R
                  ON T.sort = R.sort + 1
                     AND ( R.[a] IS NULL
                            OR R.[b] IS NULL
                            OR R.[c] IS NULL ))
SELECT TOP 1 [a],
             [b],
             [c]
FROM   R
ORDER  BY [sort] DESC 
于 2012-08-26T22:22:23.460 回答