こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

SQL文を教えてください

以下の2つのテーブルから結果に書かれている内容を取得したいのですが、どのようなSQLを作成すればよいでしょうか?

料理テーブル
料理名 値段
ラーメン 1000
カレー 700
焼肉定食 800

オプションテーブル
料理名 オプション(00:ご飯、01:味噌汁、02:サラダ)
ラーメン 00
ラーメン 01
カレー 00
焼肉定食 00
焼肉定食 01
焼肉定食 02

取得したい結果
ご飯をa、味噌汁をb、サラダをcとして、オプション有の場合は'1'を、なしの場合は'0'をたて、
オプションをabcと3桁で表したいのですが。

料理名 オプション
ラーメン 110
カレー 100
焼肉定食 111

説明が下手ですいませんが、よろしくお願いします。

投稿日時 - 2011-08-20 01:49:50

QNo.6954518

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

こんなのでどうでしょ。

SELECT A.料理名
, ISNULL(MAX(CASE B.オプション WHEN '00' THEN '1' END), '0')
+ ISNULL(MAX(CASE B.オプション WHEN '01' THEN '1' END), '0')
+ ISNULL(MAX(CASE B.オプション WHEN '02' THEN '1' END), '0') AS オプション
FROM 料理テーブル AS A
LEFT JOIN オプションテーブル AS B ON A.料理名 = B.料理名
GROUP BY A.料理名

投稿日時 - 2011-08-21 16:43:48

ANo.2

手元にSQL Serverが無いのですが、
以下のような感じでどうかなと思います。

SELECT 料理名,
CASE WHEN A=0 THEN '0' ELSE '1' END +
CASE WHEN B=0 THEN '0' ELSE '1' END +
CASE WHEN C=0 THEN '0' ELSE '1' END
AS オプション FROM
(SELECT 料理名,
,SUM(CASE WHEN オプション='00' THEN 1 ELSE 0 END) AS A
,SUM(CASE WHEN オプション='01' THEN 1 ELSE 0 END) AS B
,SUM(CASE WHEN オプション='02' THEN 1 ELSE 0 END) AS C
FROM オプションテーブル GROUP BY 料理名)

投稿日時 - 2011-08-20 09:13:03

ANo.1

オプションの値で2(もしくは10)のべき乗を計算して、集計するとか。

投稿日時 - 2011-08-20 08:36:55

あなたにオススメの質問