2012-07-09 6 views
5

私は4列にクエリから単一列の結果を分割したい:SQL単一列分割みとめ以上の列

サンプルソース:(Select [FirstName from User
ピーター
メアリー
ジョン
ティナ
カール
ジェーン
ビル
サラ

私は次のようになりたい:

ここ
Column1 Column2 Column3 Column4 
Peter  Mary  John  Tina 
Carl  Jane  Bill  Sarah 

答えて

8

に指示決定的な結果を得るために一意の列をORDER BYにすることができますが、これらの行に沿ったものは機能するはずです。

;WITH T 
    AS (SELECT [FirstName], 
       (ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1)/4 AS Row, 
       (ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1) % 4 AS Col 
     FROM [User]) 
SELECT [0] AS Column1, 
     [1] AS Column2, 
     [2] AS Column3, 
     [3] AS Column4 
FROM T PIVOT (MAX(name) FOR Col IN ([0], [1], [2], [3])) P 
ORDER BY Row 
+0

+1しかし、Colのrow_number()にも '-1'が必要だと思います。 –

+0

ありがとう!私は異なるModulusとrownumsで結合する4つの一時テーブルを使って作業をしましたが、CTEはより良く見えます! – callisto

+0

@NikolaMarkovinović - True、または '1,2,3,0,1,2,3,0'を出力するときにエイリアシングのニーズが変わった。あなたの提案に従って編集。 –

1

あなたはオプションのトンを持って、1を探し、あなたの場合に適してい: Create columns from list of values

前のリンクは、あなたが必要とするeven more information

+0

私はリンクを見ましたが、複数の行の値を含む単一の列を作成する方法のみを示しています。私は1列を4列に分解したいです – callisto

+0

はい、あなたは正しいです、私はちょうど私の答えを編集しました。多分コメントでなければなりません。質問。 – Yaroslav