3

SQLに次のテーブルがあります

AL1 | AL2 | AL3 | ACB | LL1 | LL2 | LL3 | LCB  
------------------------------------------------
 1  |  2  |  3  |  4  |  5  |  6  |  7  |  8

のように変換したいと思います。

    | L1  | L2  | L3  | CB  
-----------------------------
A   |  1  |  2  |  3  |  4   
L   |  5  |  6  |  7  |  8

どんな助けでも大歓迎です。

4

4 に答える 4

3

別の方法 (Devart と同じ計画ですが、より簡潔な構文)

SELECT V.*
FROM TBL
CROSS APPLY (VALUES ('A', AL1,AL2,AL3,ACB),
                    ('L', LL1,LL2,LL3,LCB)) V( COL, LL1, LL2, LL3, LCB)

SQL フィドル

于 2013-08-05T11:50:00.520 に答える
3

これを試してみてください -

クエリ:

DECLARE @temp TABLE
(
    AL1 INT, AL2 INT, AL3 INT, ACB INT, 
    LL1 INT, LL2 INT, LL3 INT, LCB INT
)
INSERT INTO @temp (AL1, AL2, AL3, ACB, LL1, LL2, LL3, LCB)
VALUES (1, 2, 3, 4, 5, 6, 7, 8)

SELECT 
      COL
    , COL1 = CASE WHEN COL = 'A' THEN AL1 ELSE LL1 END
    , COL2 = CASE WHEN COL = 'A' THEN AL2 ELSE LL2 END
    , COL3 = CASE WHEN COL = 'A' THEN AL3 ELSE LL3 END
    , COL4 = CASE WHEN COL = 'A' THEN ACB ELSE LCB END
FROM @temp
CROSS JOIN (VALUES ('A'), ('L')) AS t(COL)

出力:

COL  COL1        COL2        COL3        COL4
---- ----------- ----------- ----------- -----------
A    1           2           3           4
L    5           6           7           8

実行計画:

qqq

于 2013-08-05T11:44:10.007 に答える