0

次の列を持つテーブルがあります。

Name, Img1, Img2

データのスナップショットは次のようになります。

Stack, lemon.jpg, null
Stack, null, orange.jpg
Stack,plum.jpg, null
Stack,grape.jpg, aubergine.jpg

各名前に関連付けられる画像の数に制限はありません。

しかし、私は以下のように最初の10枚の画像を返したい:

select name, img1, img2, img3, img4, img5, img6 ... img10
4

2 に答える 2

1

どうですか、

フィドルが動作するようになりました

    WITH snapshot(n, name, img1, img2) AS
(
    SELECT TOP 5
                ROW_NUMBER() OVER(ORDER BY Name) n,
                name,
                img1,
                img2
        FROM yourtable
        WHERE name = 'Stack'
        ORDER BY Name    
)
SELECT
             row1.Name,
             row1.Img1,
             row1.Img2,
             row2.Img1 Img3,
             row2.Img2 Img4,
             row3.Img1 Img5,
             row3.Img2 Img6,
             row4.Img1 Img7,
             row4.Img2 Img8,
             row5.Img1 Img9,
             row5.Img2 Img10
    FROM snapshot row1
        LEFT JOIN snapshot row2 ON row2.n = 2
        LEFT JOIN snapshot row3 ON row3.n = 3
        LEFT JOIN snapshot row4 ON row4.n = 4
        LEFT JOIN snapshot row5 ON row5.n = 5
    WHERE row1.n = 1

これは、CTE を定義することで機能します。

    SELECT TOP 5
                ROW_NUMBER() OVER(ORDER BY Name) n,
                name,
                img1,
                img2
        FROM yourtable
        WHERE name = 'Stack'
        ORDER BY Name

その結果は

N  NAME   IMG1       IMG2 
1  Stack  lemon.jpg  (null) 
2  Stack  (null)     orange.jpg 
3  Stack  plum.jpg   (null) 
4  Stack  grape.jpg  aubergine.jpg

次に、最初の行を選択し、必要な後続の各ペアに対して左自己結合を行います。

于 2013-07-15T15:22:42.367 に答える