2016-11-03 7 views
-1

誰かが自分のSQLを手助けできますか?MySQLの行を列数と合計に変換する

私は、次のようなレコードを持つテーブルがあります。次の出力を取得するために、SQLクエリを作成する方法

ID | Car_num | Service | Price 
---+---------+---------+------ 
1 | 001  | shower | 10 
2 | 002  | TV  | 5 
3 | 001  | TV  | 5 

を?

ID |Car_num | shower | TV 
---+--------+--------+--- 
1 | 001 | 10  | 5 
2 | 002 | 0  | 5 
+0

あなたの期待しているテレビは列ヘッダーとして表示されますが、期待値は正しいですか?一度それを再チェックできますか? – Balan

答えて

-1

はこれを試してみてください#テーブル )データ PI VOT ( )_ SERVICE IN([TV]、[シャワー]) )AS PVT

+1

このクエリは、MySQLの特定のバージョンでも動作しません。 –

+0

それは私のマシン上で動作します.. :) – Hermanto

+0

あなたのマシンではなく、あなたのMySQLのバージョン。いくつかのバージョンのMySQLと事実上すべてのRDMBSでは、 'ID'が' GROUP BY'で指定されていないか、集約関数でラップされているため、 'SELECT ID'はエラーを生成します。 –

3

ピボットクエリを使用します。 ( SELECT Car_num、_Service、ISNULL(価格、0)価格 FROM FROM

SELECT ID, Car_num 
    , SUM(IF(Service = 'shower', Price, 0)) AS Shower 
    , SUM(IF(Service = 'TV', Price, 0)) AS TV 
FROM your_table 
GROUP BY Car_num; 
+0

すごく、ありがとう。 – DKprojektai

0
SELECT ROW_NUMBER() OVER(ORDER BY Car_num) Id,Car_num ,ISNULL([TV],0) [TV],ISNULL([shower],0) [shower] 

SELECT MIN(ID) AS ID, 
     Car_num, 
     MAX(CASE WHEN Service = 'shower' THEN Price ELSE 0 END) AS shower, 
     MAX(CASE WHEN Service = 'TV'  THEN Price ELSE 0 END) AS TV 
FROM yourTable 
GROUP BY Car_num 
関連する問題