2016-05-23 4 views
-1

こんにちは私は以下のようなテーブルを持っています。SQL Serverで行を列と列に切り替えて行に変換する方法はありますか?

Stat      Points TeamA TeamB  Date 
Highest Total    248  5  387  2016-05-14 
Lowest Total    153  2  5  2016-05-11 
Highest Successful Chase 195  5  386  2016-05-07 
Lowest Score Defended  211  5  4  2016-05-18 

が、私は結果を得るために私を助けて

 Highest Total Lowest Total Highest Chase Low Defended 
    A  248    153    195    211  
    B  5    2    5    5 
    C  384    5    386    4 
    D  2016-05-14  2016-05-11  2016-05-07  2016-05-18 

、のような結果が欲しい、私は、SQL Serverのための新規の方です。

+0

最初のテーブルのバージョンが恐ろしいですが、それの第二の少し良い...本当にそれらのいずれかを...理解できない – jarlh

+0

最初のテーブルの最初の行は列名です。 – DineshDB

+2

[単純な方法で列と行をSqlに転記できますか?](http://stackoverflow.com/questions/13372276/simple-way-to-transpose-columns-and-rows-in-sql) – blackbishop

答えて

1

この「A」、「B」、とにかくピボットとピボットは本当に意味します。 また、さまざまなタイプを共通のvarchar(20)にキャスティングしています。あなたの要件に応じて異なるキャストが必要な場合があります。

select rowType, 
    max(case ut.stat when 'Highest Total' then value end) as [Highest Total], 
    max(case ut.stat when 'Lowest Total' then value end) as [Lowest Total], 
    max(case ut.stat when 'Highest Chase' then value end) as [Highest Chase], 
    max(case ut.stat when 'Lowest Score Defended' then value end) as [Lowest Defended] 
from t 
cross apply (
    select * 
    from (
     values 
     ('A', cast(points as varchar(20)), stat), 
     ('B', cast(TeamA as varchar(20)), stat),   
     ('C', cast(TeamB as varchar(20)), stat), 
     ('D', cast(Date as varchar(20)), stat) 
    ) ut(rowType, value, stat))ut 
group by rowType 
+0

@Sergさんへのお返事ありがとうございます。しかし、int型とdate型のデータ型にはいくつかの問題があります。しかし、それは私に多くの助けになります。 – DineshDB

+0

キャストを表示するように2番目のクエリを更新しました。 – Serg

+0

これは正常に機能しますが、注文は変更されています。私は私が望むのと同じ順序でそれを得ることができます。 – DineshDB

関連する問題