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行を取得する方法ですべての行を結合する必要があり、各列について最初の(ソート列で並べ替えられた)非null値を取得します。したがって、私の結果は次のようになります。

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 に答える