2017-07-05 4 views
0

私は、私はこのクエリを使用した後に持っている次のような結果があります。SQLクエリを使用して列を列に変換する方法は?

select SCHOOL_YEAR,COUNT(MUSIC) as ct,MUSIC from [table1] 
group by SCHOOL_YEAR,MUSIC; 

SCHOOL_YEAR ct  MUSIC 

2011   100  Piano 
2011   50  Violin 
2012   70  Piano 
2012   150  Violin 

を私は次の形式でそれをしたい:

SCHOOL_YEAR Piano  Violin 

2011   100  50 
2012   70   150 

どのように私はそれを達成することができますか?

+0

SQLで転置をご確認くださいhttps://stackoverflow.com/questions/10699997/sql-server-transpose -rows-into-columns [リンクの説明をここに入力してください](https://stackoverflow.com/questions/10699997/sql-server-transpose-rows-into-columns) – zen

答えて

0

元のテーブル上のピボットクエリを使用しますが、学年にのみ集約:

SELECT 
    SCHOOL_YEAR, 
    SUM(CASE WHEN MUSIC = 'Piano' THEN 1 ELSE 0 END) AS Piano, 
    SUM(CASE WHEN MUSIC = 'Violin' THEN 1 ELSE 0 END) AS Violin 
FROM table1 
GROUP BY 
    SCHOOL_YEAR 
+0

これは、各「音楽」の行数をカウントする「THEN 1」は「音楽」でなければなりません。 –

+0

@SloanThrasher 'MUSIC'列は数字ではなくテキストです。質問を読んでください。ここでの唯一の問題は、NULL値を数えることです。私の集計では、 'COUNT()'関数のようにNULLを無視します。 –

+0

@TimBiegeleisen:私は '1'の代わりに' 0'は 'ct'を使うべきだと思います。 – Wanderer

関連する問題