2009-06-10 12 views
0

私は、この日付と価格の束を持つ表があります。SQLは特性関数を単純化しますか?またはPIVOTテーブル?

ルーム名、価格、Bookdateなど

そして、私はそうのようにそれを変換することができます(基本的に列を反転させた)

SELECT availables.name, rooms.id, 
    MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 0, availables.price, '')) AS day1, 
    MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 1, availables.price, '')) AS day2, 
    MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 2, availables.price, '')) AS day3, 
    MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 3, availables.price, '')) AS day4, 
    MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 4, availables.price, '')) AS day5, 
    MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 5, availables.price, '')) AS day6, 
    MAX(IF(to_days(availables.bookdate) - to_days('2009-06-13') = 6, availables.price, '')) AS day7, 
AVG(availables.price),SUM(availables.price) 
FROM `availables` 
INNER JOIN rooms 
ON availables.room_id=rooms.id 
WHERE availables.room_id = '18382' 
GROUP BY availables.name 

これは完璧に動作し、これを生成します。

name id day1 day2 day3 day4 day5 day6 day7 AVG(availables.price) SUM(availables.price) 
Bed  18382 23.00 21.00 21.00 21.00 21.00 21.00  21.571429 151.00 

しかし、私は日数を知らないので、私はそれがどのように簡略化することができますか?それは1か7かもしれませんか?何か案は?

+0

データベースはmysql – holden

答えて

1

this answerとそれがリンクしているものを見てください。

+0

です。両方の例がピボットを使用しているようですが、MySQLがサポートしていないことは間違いありませんか? – holden

+0

ほとんど同じ動的SQL技法を使用して、列の数を判別し、特性関数で実行するSQLを生成することができます。 –

関連する問題