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で質問しましょう!
似たような質問が見つかりました
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Excel(エクセル) エクセル 関数について 4 2022/08/05 11:03
- その他(買い物・ショッピング) JANコードの登録について 1 2022/07/23 14:19
- SQL Server SQLのクエリの書き方 1 2022/03/29 23:06
- 簿記検定・漢字検定・秘書検定 棚卸減耗損について 2 2022/05/19 04:48
- 会計ソフト・業務用ソフト Excelで売上げデータの中の任意の商品の合計を出したい 3 2023/01/18 18:19
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) EXCEL関数LOOKUPとFILTERについての質問です 1 2022/12/21 05:53
- Visual Basic(VBA) VBAで質問があります 1 2022/10/19 10:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
Accessユニオンクエリーで2つ...
-
SELECT時にカウントアップ
-
片方だけ抽出する方法(SQL)
-
SQL 2つのテーブルとSUBSTRING...
-
[Oracle] UPDATE分の副問い合わ...
-
ACCESS 一つのフィールドに複...
-
PLSQLの識別子エラー
-
場合によって条件を変えるSQL
-
Sheet1$が存在致しませんとエラー
-
3つのテーブルから条件に一致し...
-
下記のsqlで取得されるレコード...
-
社内コードをソースコードに直...
-
主キーの変更
-
ACCESS2000でDCount関数の使い方
-
access初心者です。 アパレル...
-
Accessでフィールドを比較した...
-
行方向のデータを横に並べる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
ACCESS 一つのフィールドに複...
-
PLSQLの識別子エラー
-
主キーの変更
-
Accessでフィールドを比較した...
-
SQL 2つのテーブルとSUBSTRING...
-
続.ORACLEのSELECTのソートに...
-
行方向のデータを横に並べる
-
下記のsqlで取得されるレコード...
-
VIEWでテーブルの集計結果...
-
update文で質問です。 下記の条...
-
[Oracle] UPDATE分の副問い合わ...
-
片方だけ抽出する方法(SQL)
-
自分自身への矢印
-
連番のMin, Maxを取得したい
-
Accessユニオンクエリーで2つ...
-
日付の最大値を検索条件にする方法
-
Inner join と Left joinの明...
おすすめ情報
where 0 then の部分が、データがないと条件に該当しないようで、全て'売'になってしまいました。
データがない場合の判定をするか、データがある場合の判定をするかどちらか正しく判定をするにはどのようにすればいいのでしょうか。
ありがとうございます。
その情報を使って次のアクションをかけるので、やはり更新しないといけない状態です。