3

次のようにSQLサーバーで行をマージしたい。

テーブル

PK  F1      F2      F3      Order
A   NULL    NULL    Grapes  2
B   NULL    Fig     NULL    1
C   Apple   Orange  Banana  0

入力と期待される結果は次のとおりです。

Input       Expected Result     
2       Apple   Fig    Grapes
1       Apple   Fig    Banana
0       Apple   Orange Banana

SQLストアドプロシージャでこれを行うにはどうすればよいですか? 私はコードよりもSQLで行うことを好みます。

前もって感謝します

4

1 に答える 1

3

あなたが正しく入力したことを理解していれば、次のようなものかもしれません。

テストデータ

DECLARE @T TABLE
(
    PK VARCHAR(5),
    F1 VARCHAR(10),
    F2 VARCHAR(10),
    F3 VARCHAR(10),
    [Order] INT
)

INSERT INTO @T
VALUES
    ('A',NULL,NULL,'Grapes',2),
    ('B',NULL,'Fig',NULL,1),
    ('C','Apple','Orange','Banana',0)

クエリ

;WITH CTE
AS
(   
    SELECT
        ROW_NUMBER() OVER(ORDER BY [Order]) AS RowNbr,
        T.*
    FROM
        @T AS T
)
, CTE2
AS
(
    SELECT
        CTE.RowNbr,
        CTE.PK,
        CTE.F1,
        CTE.F2,
        CTE.F3,
        CTE.[Order]
    FROM
        CTE
    WHERE
        CTE.RowNbr=1
    UNION ALL
    SELECT
        CTE.RowNbr,
        CTE.PK,
        ISNULL(CTE.F1,CTE2.F1),
        ISNULL(CTE.F2,CTE2.F2),
        ISNULL(CTE.F3,CTE2.F3),
        CTE.[Order]
    FROM
        CTE
        JOIN CTE2 ON CTE.RowNbr=CTE2.RowNbr+1

)
SELECT
    CTE2.[Order],CTE2.F1,CTE2.F2,CTE2.F3
FROM
    CTE2
ORDER BY
    CTE2.RowNbr DESC

結果

2   Apple   Fig     Grapes
1   Apple   Fig     Banana
0   Apple   Orange  Banana
于 2012-04-14T11:32:56.060 に答える