2016-07-25 5 views
0

行を列に変換したい。行を列に変換するSQLサーバー

Column1 Column2 Column3  Column4 Column5 Column6 Column7 
1  2016-07-25 7   3  c1  c11 c111 
2  2016-07-26 5   2  c2  c22 c222 
3  2016-07-27 1   2  c3  c33 c333 
4  2016-07-28 3   1  c4  c44 c444 

次のように私は出力をしたい:

Column1  1   2   3   4 
Column2 2016-07-25 2016-07-26 2016-07-27 2016-07-28 
Column3  7   5   1   3 
Column4  3   2   2   1 
Column5  c1   c2  c3   c4 
Column6  c11   c22  c33   c44 
Column7  c111   c222  c333  c44 

私はピボットアンピボットを使用して、それを実行しようとしましたが、適切な解決策を見つけることができませんでした。 最初のテーブル(入力)はn個の行を持つことができます。

+0

を、あなたは何を意味するのですか?画面への出力、テーブルへの出力? – FDavidov

+0

私は最初のテーブルを反転するselect文を探しています。つまり、必要な書式にテーブルを入力してください。 –

答えて

0

あなたがする必要があります動的SQL:

出力:あなたは、クエリのテキストを取得します

Columns 1   2   3   4 
Column1 1   2   3   4 
Column2 2016-07-25 2016-07-26 2016-07-27 2016-07-28 
Column3 7   5   1   3 
Column4 3   2   2   1 
Column5 c1   c2   c3   c4 
Column6 c11   c22   c33   c44 
Column7 c111  c222  c333  c444 

あなたの場合PRINT @sql:あなたは "私は出力をしたい..." 書くとき

SELECT * 
FROM (
    SELECT RN, 
      [Columns], 
      [Values] 
    FROM (
     SELECT CAST([Column1] as nvarchar(max)) as [Column1],CAST([Column2] as nvarchar(max)) as [Column2],CAST([Column3] as nvarchar(max)) as [Column3],CAST([Column4] as nvarchar(max)) as [Column4],CAST([Column5] as nvarchar(max)) as [Column5],CAST([Column6] as nvarchar(max)) as [Column6],CAST([Column7] as nvarchar(max)) as [Column7], 
       ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as RN 
     FROM ##YourTable 
     ) as p 
    UNPIVOT (
     [Values] FOR [Columns] IN ([Column1],[Column2],[Column3],[Column4],[Column5],[Column6],[Column7]) 
    ) as unpvt 
) as s 
PIVOT (
    MAX([Values]) FOR RN IN ([1],[2],[3],[4]) 
) as pvt 
+0

ありがとうございます:)それは期待通りに働いています:) –

0

ピボットピボットを使用していましたが、適切な解決策が見つかりませんでした。 最初のテーブル(入力)はn個の行を持つことができます。

動的な行数に対してはPIVOTが機能しないため動作しない理由があります。意味は、構文は列として固定数の行のみを転置することができ、その列を問合せで指定する必要があります。行内の値に基づいて動的に自動的に列を生成することはできません。

編集:

一つ私は、動的ピボット見つかりソリューション(Google検索からの第一の結果):https://www.mssqltips.com/sqlservertip/2783/script-to-create-dynamic-pivot-queries-in-sql-server/

それは、動的SQLを必要とする(他の選択肢はありません)

+0

はい私はあなたに同意します。 この問題に対処する他の方法はありますか? –

+0

@AboliOgale上記の編集された答えをリンクで確認してください – objectNotFound

0
DECLARE @TABLE TABLE 
    (RowNo INT,Col1 VARCHAR(10),Col2 VARCHAR(10) 
    ,Col3 VARCHAR(10))  
INSERT INTO @TABLE VALUES 
    (1,'A','B','C') 
SELECT Kishore from @Table 
Unpivot(Kishore For Value IN (Col1,Col2,Col3)) AS H 
関連する問題