2016-05-20 8 views
1

私のカテゴリテーブルには次のデータがあります。SQL Serverでテーブル形式のデータをリスト形式に変換する

カテゴリからselect *を入力すると、このようなデータが得られます。この表は10列以上です

CategoryId CategoryName c3 c4 .....c10 
1   aaa 
2   bbb 
3   ccc 
... 
... 

このようなデータを表示したいと思います。私はこれのためにSQLを準備する方法を知らない。

CategoryId 1 
CategoryName aaa 
C3 
... 
... 
C10 
CategoryId 2 
CategoryName bbb 
C3 
... 
... 
C10 
CategoryId 3 
CategoryName ccc 
C3 
... 
... 
C10 

... 

私に何か提案してください。

+1

名 "表形式" と "リスト形式は、" データベースのための意味を持ちません。あなたが何を記述し、列と行を交換するかをピボットといいます。少なくとも1つの方法は、 'PIVOT'と' UNPIVOT'コマンドを使用することです –

+0

私は2列でこの行を変換したい10列以上あります。私はこのためにunpivotを行う方法がわかりません – StackUser

答えて

1

あなたはこのようなCross Apply使用して、それを達成することができます -

DECLARE @OutItem TABLE 
(
    CategoryId INT, 
    CategoryName varchar(10), 
    c3 varchar(10) 
) 

INSERT INTO @OutItem 
    VALUES (1,'aaa', 'c31'), 
(2,'bbb', 'c32'), 
(3,'ccc', 'c33') 


SELECT ca.* from @OutItem 
CROSS APPLY (
    VALUES ('CategoryId', CAST(CategoryId AS VARCHAR)), 
     ('CategoryName', CategoryName), 
     ('C3', c3) 
     --, Add your 10 columns here same as above 
) ca (TabCol, TabVal) 

結果

TabCol  TabVal 
=================== 
CategoryId 1 
CategoryName aaa 
C3   c31 
CategoryId 2 
CategoryName bbb 
C3   c32 
+0

ありがとうございますkrishnraj – StackUser

関連する問題