
以下の様なデータが、データベースに入っています。
table 映画データ
映画館 映画名 日付 メモ
-------------------------------------
バルト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指定
これを映画館 >映画名 > 日付(初めから終わりまでつなげる)の順番で抜き出したいです。
以下のように。
バルト9 「タイタニック」 2013-10-15 - 2013-10-17 ※2000円
バルト9 「E.T」 2013-10-18 - 2013-10-19 ※子ども向け
渋谷東急 「007」 2013-10-17 - 2013-10-19 ※R指定
渋谷東急 「アメリ」 2013-10-20 ※女性向け
このようなSELECT文はどう書けばよいでしょうか。
すみませんがよろしくお願いいたします
No.3ベストアンサー
- 回答日時:
select
映画館
, 映画名
, case when min(日付) = max(日付)
then min(日付)
when min(日付) <> max(日付)
then min(日付) + ' - ' + max(日付)
end
,max(メモ)
from 映画データ
group by 映画館,映画名
order by 映画館,映画名
ご参照ください。
CASE文で非常にシンプルに回答頂きまして大変役に立ちました。
他の方も丁寧にお応えいただいて心苦しいのですが、
ベストアンサーとさせていただきます。
No.4
- 回答日時:
#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;
お返事が遅れて誠に申し訳ありません。
二度も丁寧にご回答ありがとうございました。
正規化については不勉強で、おかげさまで今勉強しています。
丁寧なご回答ありがとうございました。
No.2
- 回答日時:
正規化について学習なさった方がよいかと
//データ作成
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;
お返事が遅れて誠に申し訳ありません。
正規化については不勉強で、おかげさまで今勉強しています。
丁寧なご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のDB(Table)からの複数行の...
-
同じサーバーで、異なるデータ...
-
Unionした最後にGROUP BYを追加...
-
【SQL文】Insert into文で文法...
-
[MySQL] 1対多のリレーションで...
-
DB設計について
-
レコード数が増えすぎた場合の対処
-
MySQLにてCOUNTした値を更にCOUNT
-
カラム名でseqとidではどちらが...
-
同一のユーザー、同一商品のと...
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
1テーブル&複数レコードの更新...
-
SQLサーバから、項目の属性(型...
-
よか石けんの口コミや評判
-
期間の重複を調べるSQL文につい...
-
VIEWの元のテーブルのindexって...
-
inner joinをすると数がおかし...
-
updateを1行ずつ実行したい。
-
select文のwhere句に配列を入れ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
エラー 1068 (42000): 複数の主...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
マイクラPC版のコマンドで効率...
-
【Transact-sql】 execの結果を...
-
sqlで、600行あるテーブルを100...
-
SQLにて特定の文字を除いた検索...
-
1テーブル&複数レコードの更新...
-
PL/SQLの変数について
-
WordpressのContact form 7でzi...
-
複数テーブルのGROUP BY の使い...
-
バインド変数について
-
inner joinをすると数がおかし...
-
MySQLのint型で001と表示する方...
-
updateを1行ずつ実行したい。
おすすめ情報