
SQL文の書き方を教えてください。
データベースの構造を簡略して説明しますと、商品テーブルに商品コードと状態の項目があり、売上テーブルに売上番号と商品コードと売上数量の項目があります。
商品テーブル
商品コード 状態
001 空白
002 空白
売上テーブル
売上番号 商品コード 売上数量
1 001 10
2 001 20
売上テーブルの売上レコードの件数を商品コード別にカウントし、レコード件数がゼロだったら”未”、ゼロ以外だったら”売”という値を商品テーブルの状態にセットしたいのですが、どのようなSQL文を書けばいいのでしょうか。
上のような場合に期待される結果は次の通りです。
商品テーブル
商品コード 状態
001 売
002 未
商品コード001はレコード件数が2件なので”売”、商品コード002はレコードがないので”未”。
初歩的な質問ですが、教えてください。
No.5ベストアンサー
- 回答日時:
UPDATE JOINで更新するといいですよ。
①商品テーブルと売上テーブルでLEFT JOINします。
②商品テーブルにあって、売上テーブルに存在しないデータは、売上数量がnullになるので、
売上数量がnullの場合は未、それ以外は済ですかね。
※数量合計が0の場合はとか考える必要があるなら、売上テーブルをサブクエリ(GroupBY+sum)にして、null or 0 は未、それ以外は済とかでよいかな。
--サンプル
declare @商品 table(商品コード char(3),状態 nvarchar(1))
declare @売上 table(売上番号 int,商品コード char(3),売上数量 int)
insert @商品 values('001',''),('002','')
insert @売上 values(1,'001',10),(2,'001',20)
update @商品 set 状態 = case when 売上数量 is null then '未' else '売' end
--以下のFrom句ではテーブル変数を使っていますので、テーブル名をリネームしていますが、実テーブルの場合はリネーム不要です。
from @商品 as 商品 left join @売上 as 売上
ON 商品.商品コード = 売上.商品コード
select * from @商品
--結果
--商品コード 状態
--001 売
--002 未
No.4
- 回答日時:
ANo.1です。
データがあるものだけを対象としたいならば、updateの条件としてexists()で、売上データに存在するものだけを対象とすれば済む話です。
また、1レコード単位に毎度毎度売上データを集計するクエリなので、例え一発SQLで出来たとしてもパフォーマンスが高いかと言われたらそうではありません。
が、そもそもそういう状況も存在するということでやりたいことを考えたら、ANo.3の回答がベストプラクティスでしょう。
No.3
- 回答日時:
>何とか一つのSQL文で
そもそもが商品テーブルに新規にレコードを追加するときに状態を「未」に
すれば済む話なので、デフォルトで処理するなり、レコード追加する際に「未」を
スタティックにしていするなりすればよい話です。
すでに登録しているデータを1度だけ更新するだけであれば
UPDATE テーブル SET 状態='未' WHERE 状態=''
として、あとはデフォルト値にまかせるのが賢明です
No.1
- 回答日時:
uptate
商品テーブル a
set
a.状態=(select case count(*) when 0 then '未' else '売' end from 売上テーブル b where b.商品コード=a.商品コード)
みたいな
動作未確認です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
重複するキーから一番古い年月...
-
商品コード番号を入力すると商...
-
ACCESS2000です。
-
「マスタ」と「テーブル」の違...
-
このようなview書けますか?
-
SQL文について(片方のテーブル...
-
ACCESS インポート時の重複チ...
-
【Access】順位を付けたい
-
Microsoft Access 2010の初心者...
-
SI Object Browserのテーブルス...
-
Access VBA [リモートサーバー...
-
SQLServerで同一条件レコードの...
-
アクセスのテーブルからエクス...
-
時系列データの抜けの調べ方
-
既に使用されているので、使用...
-
SQLスクリプトを自動生成する方法
-
bcpインサートでのフォーマ...
-
DBMAGICのプログラム解析
-
ACCESS-リンクテーブルの設定で...
-
sqlplusでバックスペースが効か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
主キーの変更
-
update文で質問です。 下記の条...
-
ACCESS 一つのフィールドに複...
-
続.ORACLEのSELECTのソートに...
-
accessで移動平均する方法
-
行方向のデータを横に並べる
-
Accessでフィールドを比較した...
-
PLSQLの識別子エラー
-
商品コード番号を入力すると商...
-
ACCESSのデータシート形式のフ...
-
複数InnerJoin時の処理落ち回避法
-
Accessのテーブル設計について...
-
正規化・リレーションシップに...
-
Accessのコンボボックスの使い...
-
データベースの問題
-
ACCESSのコンパイルエラーについて
-
SQL結合条件
おすすめ情報
where 0 then の部分が、データがないと条件に該当しないようで、全て'売'になってしまいました。
データがない場合の判定をするか、データがある場合の判定をするかどちらか正しく判定をするにはどのようにすればいいのでしょうか。
ありがとうございます。
その情報を使って次のアクションをかけるので、やはり更新しないといけない状態です。