- ベストアンサー
SQLの複雑なソートSELECT
- データベースの映画データから映画館、映画名、日付の順に抜き出すSELECT文を作成する方法を教えてください。
- 映画データの表から、映画館名、映画名、日付を結合して表示するSELECT文の作成方法について教えてください。
- データベースの映画データを映画館、映画名、日付の順にソートするSELECT文を作成する方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
select 映画館 , 映画名 , case when min(日付) = max(日付) then min(日付) when min(日付) <> max(日付) then min(日付) + ' - ' + max(日付) end ,max(メモ) from 映画データ group by 映画館,映画名 order by 映画館,映画名 ご参照ください。
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
#2です コピペミスみたいなので再投稿します //データ作成 create table movie(m_id int,m_name varchar(100),m_memo text); insert into movie values(1,'タイタニック','※2000円'),(2,'E.T','※子ども向け'),(3,'007','※R指定'),(4,'アメリ','※女性向け'); create table theater(t_id int, t_name varchar(20)); insert into theater values(1,'バルト9'),(2,'渋谷東急'); create table schedule(t_id int,m_id int,s_date date); insert into schedule values(1,1,'2013-10-16'),(1,2,'2013-10-19'),(2,3,'2013-10-17'),(1,1,'2013-10-17'),(2,3,'2013-10-18'),(2,4,'2013-10-20'),(1,2,'2013-10-18'),(1,1,'2013-10-15'),(2,3,'2013-10-19'); //スケジュール一覧 select t_name,m_name,s_date,m_memo from schedule as s inner join movie as m on s.m_id=m.m_id inner join theater as t on s.t_id=t.t_id; //スケジュール集計 select t_name,m_name,min(s_date) as start,if(count(s_date)=1,null,max(s_date)) as end,m_memo from schedule as s inner join movie as m on s.m_id=m.m_id inner join theater as t on s.t_id=t.t_id group by t_name,m_name;
お礼
お返事が遅れて誠に申し訳ありません。 二度も丁寧にご回答ありがとうございました。 正規化については不勉強で、おかげさまで今勉強しています。 丁寧なご回答ありがとうございました。
- yambejp
- ベストアンサー率51% (3827/7415)
正規化について学習なさった方がよいかと //データ作成 create table eiga(place varchar(20),title varchar(100),day date,memo text); insert into eiga values('バルト9','タイタニック','2013-10-16','※2000円'),('バルト9','E.T','2013-10-19','※子ども向け'),('渋谷東急','007','2013-10-17','※R指定'),('バルト9','タイタニック','2013-10-17','※2000円'),('渋谷東急','007','2013-10-18','※R指定'),('渋谷東急','アメリ',' 2013-10-20','※女性向け'),('バルト9','E.T','2013-10-18','※子ども向け'),('バルト9','タイタニック','2013-10-15','※2000円'),('渋谷東急','007','2013-10-19','※R指定'); create table movie(m_id int,m_name varchar(100),m_memo text); insert into movie values(1,'タイタニック','※2000円'),(2,'E.T','※子ども向け'),(3,'007','※R指定'),(4,'アメリ','※女性向け'); create table theater(t_id int, t_name varchar(20)); insert into theater values(1,'バルト9'),(2,'渋谷東急'); //スケジュール一覧 select t_name,m_name,s_date,m_memo from schedule as s inner join movie as m on s.m_id=m.m_id inner join theater as t on s.t_id=t.t_id; //スケジュール集計 select t_name,m_name,min(s_date) as start,if(count(s_date)=1,null,max(s_date)) as end,m_memo from schedule as s inner join movie as m on s.m_id=m.m_id inner join theater as t on s.t_id=t.t_id group by t_name,m_name;
お礼
お返事が遅れて誠に申し訳ありません。 正規化については不勉強で、おかげさまで今勉強しています。 丁寧なご回答ありがとうございました。
- maiko0318
- ベストアンサー率21% (1483/6969)
select 映画館,映画名,min(日付),max(日付),max(メモ) from 映画データ group by 映画館,映画名 でよろしいかと。
お礼
お返事が遅れて誠に申し訳ありません。 ご協力誠にありがとうございました。 group byの意味が未だに掴みきれてませんでした。
お礼
CASE文で非常にシンプルに回答頂きまして大変役に立ちました。 他の方も丁寧にお応えいただいて心苦しいのですが、 ベストアンサーとさせていただきます。