SQLで仕入明細テーブルと出費詳細テーブルのデータを操作する方法
- 仕入明細テーブルで部数の合計値が2000以上のインデックス番号に対応する出費詳細テーブルの伝票NOのレコードを削除する方法について説明します。
- sum(部数)が100以上のものを抽出するためにはselectでsum(部数)とする必要がありますが、インデックス番号を比較する場合はselectでsum(部数)を行わなくても可能です。
- 伝票NOと同じインデックス番号を持つ仕入明細テーブルのレコードの部数を合計し、2000以上のインデックス番号に対応する出費詳細テーブルの伝票NOのレコードを削除します。
- ベストアンサー
SQLで分からないことがあります。
仕入明細テーブル 伝票NO インデックス番号 部数 出費詳細テーブル 伝票NO 出費先 出費額 以上のデータがあります。 仕入明細テーブルでインデックス番号でグルーピング化して部数の合計値が2000以上のインデックス番号と同じ値の出費詳細テーブルの伝票NOのレコードを削除しなさい。 delete 出費詳細 where 伝票NO in (select インデックス番号, sum(部数) from 仕入明細 group by インデックス番号 having sum(部数) >= 100); これだと出来ませんよね? sum(部数)が100以上のものを抽出するためにはselectでsum(部数)としなくてはいけないのですが これだとダメですよね?伝票NOと同じか比較するのインデックス番号なので、selectでsum(部数)としないのは可能でしょうか?
- hunt9999
- お礼率73% (212/288)
- Oracle
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> ちなみにupdateやdeleteをした後にselectとすると処理が反映されたのが表示されますか? UPDATEやDELETEしたセッション(トランザクション)であれば処理が反映されたものが表示されます。 他のセッションからはCOMMIT後でないと反映されません。
その他の回答 (1)
- nora1962
- ベストアンサー率60% (431/717)
副問合せの「SUM(部数)」は省略可能です。 delete from 出費詳細 where 伝票NO in ( select インデックス番号 from 仕入明細 group by インデックス番号 having sum(部数)>=100)
お礼
ありがとうございます。 ちなみにupdateやdeleteをした後にselectとすると処理が反映されたのが表示されますか? それともcommitした後にselectしないと処理後のデータ見れませんか?
関連するQ&A
- Sql文のUpdateと副問い合わせで困っています。
お世話になっております。Sql初心者でUpdate文の書き方で困っております。ご教授の程宜しくお願い致します。 下記のような2つのテーブルがあります。 関係はTotalが合計を表すテーブルでDetailが明細を表すテーブルです。OTとNoの組み合わせで一意となります。TotalテーブルのTotalAmountはDetailテーブルのAmountの合計です。 行いたいUpdateは『TotalAmountとTotalの合計が合わないもののみTotalAmountをOTとNoで紐ずくDetailテーブルのAmountの合計で更新する』です。 ■テーブル名:Total ------------------------------------------------------- 列名) OT No TotalAmount ------------------------------------------------------- 20 100000 0 20 100001 0 20 100002 10 ■テーブル名:Detail ------------------------------------------------------- 列名) OT No Amount ------------------------------------------------------- 20 100000 10 20 100000 10 20 100001 20 20 100001 30 20 100002 5 20 100002 5 ■作成したSql update Total set TotalAmount = (select Sum(Amount) from Detail Inner Join Total on Detail.OT = Total.OT and Detail.No = Total.No group by Total.TotalAmount,Total.OT,Detail.OT,Total.No,Detail.No having Total.TotalAmount <> sum(Detail.Amount) ) where OT = (select OT from Detail) and No = (select No from Detail) and TotalAmount <> (select sum(Amount) from Detail) いろいろ試行錯誤しながら作成しましたが『サブクエリは複数の値を返しました ~ 』というエラーが出てしまいます。 つっこみどころ満載だと思いますがご教授の程宜しくお願い致します。
- 締切済み
- SQL Server
- SQLについて
お世話になります。 いろいろ考えたのですが、わかりません。 教えてください。よろしくお願いします。 ●現在のSQLは SELECT 仕入先コード, 支払予定日, SUM(金額) FROM 仕入検収テーブル GROUP BY 仕入先コード,支払予定日 ●テーブルの構成は 仕入検収テーブル 仕入検収番号 (主キー) 仕入先コード 支払予定日 部門番号 金額 ●テーブルデータは 仕入検収番号 仕入先コード 支払予定日 部門番号 金額 1 0001000 2004/06/15 10 3000 2 0001000 2004/06/15 11 7000 3 0002000 2004/06/16 10 20000 4 0001000 2004/06/17 10 1000 上記のようなテーブルの時に 現在は仕入先コードと支払予定日ごとに集約されているのですが、その集約された仕入先コードを用いてその仕入先コードは過去に仕入検収テーブルに登録されていたら備考という項目に「新規」と表示したいのです。 ●実現したい実行結果は 支払予定日 仕入先コード 金額 備考 2004/06/15 00010000 10000 新規 2004/06/16 00020000 20000 新規 2004/06/17 00010000 1000
- ベストアンサー
- Oracle
- 各伝票に対して明細を1行目だけ表示したい
たびたびお世話になります。 仮に以下のようなテーブルを考えるとします。 ○テーブルA (伝票) 伝票番号 (PK) 顧客コード ○テーブルB (伝票明細) 伝票番号 (PK) 伝票明細 (PK) 注文コード 大盛り区分 レストランなどでお客さんが注文した注文伝票を 想像していただければ良いかと思います。 一つの伝票番号に対して、複数の伝票明細があると。 DB上は上記のように格納するとします。 ここでテーブル結合を使って、各伝票の1行目の明細を表示しながら SQL1発で抜いてきたいと思います。どういうSQLを考えたら良いでしょうか? テーブルBの表示項目が1つだけなら、 SELECT A.伝票番号, A.顧客コード, (SELECT TOP 1 注文コード FROM テーブルB B WHERE A.伝票番号 = B.伝票番号) FROM テーブルA A で良いのですが、複数項目となるとどうやったら良いのか判りません。
- ベストアンサー
- SQL Server
- SQLが分かりません
SQLの初心者です。 ACCESSで売上げ管理をしようと考えています。 売上げに関するテーブルは以下のようになっています。 ●売上げヘッダ テーブル 伝票番号(キー) 売上日 売上げ金額 : ●売上げ明細 テーブル 伝票番号(キー) 枝番(キー) 商品コード 商品名 単価 数量 値引金額 : 値引金額は商品ごとに決まり、値引きしなければ0が、値引きがあればその金額が入ります。 売上げ一覧を表示する時に、以下のようなイメージで、 ワークテーブルを作って、値引きがあれば「あり」と画面に表示させたいのです。 ※無い時は何も表示させません 伝票番号 売上日 売上げ金額 値引き有無 9999 2004/1/1 10,000 10000 2004/1/2 1,500 あり 10001 2004/1/2 20,000 10002 2004/1/3 18,900 10003 2004/1/4 23,500 あり 1回のSQLで実行したいのですが、SQLには詳しくないので、 どのように書けばよいか分かりません。 よろしくお願いします。 値引き区分が無ければ、売上げヘッダを見るだけなのですが、 値引きがあるかどうかは、売上げ明細まで見なければいけないので、 SQLの書き方が分からないのと、以下のようなワークテーブルを 作る必要があると思うのですが、どうなのでしょうか。 ●ワーク テーブル 伝票番号 売上日 売上げ金額 値引き区分
- ベストアンサー
- その他(データベース)
- SQL SERVER 店舗毎のTOP10
表題の件のSQLについてアドバイスお願いいたします。 DB:SQL SERVER 2008 R2 テーブル:売上伝票 カラム 店舗|伝票No|伝票日付|商品CD|商品名|数量|単価|金額(数量x単価) SELECT TOP 10 店舗NO, 商品CD, 商品名, SUM(数量) AS 販売数, SUM(金額)AS 販売金額 FROM 売上伝票 WHERE 伝票日付 BETWEEN [開始日] AND [終了日] GROUP BY 店舗NO,商品CD,商品名, ORDER BY 店舗NO,販売金額 DESC 当然ですが、上記のSQLでは、一番若い店舗NOのトップ10しか抽出できません。 店舗別、販売金額のトップ10を抽出するための、SQL文についてお教えください。
- 締切済み
- SQL Server
- モデルクラスの数は?テーブル数?ビュー数?
MVCのモデルクラスについて質問です。 例えば、伝票テーブルと、伝票明細テーブルがあったとき、 (伝票テーブル:伝票番号 100 取引先A 伝票明細テーブル: 伝票番号 100 商品A 100円 15個 伝票番号 100 商品B 200円 10個 のようなもの) 「モデルクラス」は 「伝票テーブル操作用」と 「伝票明細テーブル操作用」に分けるべきでしょうか? それとも分けないべきでしょうか? 私は、 SELECT用なら「伝票テーブルと伝票明細テーブルを結合した状態でモデルクラスをつくる」 INSERT、UPDATE、DELETE用なら「伝票テーブル用」と「伝票明細テーブル用」に分けているのですが、 この方法はあっているでしょうか? 大抵のテーブルが参照オンリーではなく登録系も必要であるシステムなら、 「テーブル数」=「モデルクラス数」とし、 参照をメインにするようなシステムなら 「ビューの数」=「モデルクラス数」とする認識です。
- ベストアンサー
- Microsoft ASP
- アクセス 結合プロパティ が正しく結合されない(アクセス初心者です)
請求明細テーブルと、支払明細テーブルの指定伝票番号で結合して、 請求明細テーブルの全レコードと、支払明細テーブルの請求明細テーブルと一致するレコードだけを表示させたく、結合プロパティをそのように設定しました。 SQLは、下記のようになりました。 select 請求明細.指定伝票番号, 請求明細.計 from 請求明細 left join 支払明細 on 請求明細.指定伝票番号=支払明細.指定伝票番号 すると、思わぬことがおきました。 請求明細テーブルの全レコードが表示されず、一部欠落してしまいました。 同じような質問をしている人の、回答を見させていただいたところ、上記のSQLで合っているようでした。 一体なにが起きているんでしょうか??教えてください。
- ベストアンサー
- オフィス系ソフト
- 他のテーブルの抽出条件で更新したい。
・売上ヘッダ 伝票NO,売上金額合計 ・売上明細 伝票NO,明細NO,商品番号,売上金額 上記のようなテーブル構成の2つのテーブルがあります。 売上ヘッダの主キーは、伝票NOで売上明細の主キーは、伝票NOと明細NOです。 ここで、商品番号1の、売上金額に500円の差額があるため、、修正をしたいと考え、売上ヘッダと売上明細にある売上額を変更したいのですが、売上ヘッダの売上金額合計を更新する方法がわかりません。 ご教授いただけないでしょうか。
- ベストアンサー
- Oracle
- Accessで親テーブルと2つの明細テーブルでできているデータのレポートを作りたい
親テーブルと2つの明細テーブルでできているデータのレポートを作りたいのですが、レポート機能ではフォーム作成のように、詳細セクションに2つの明細テーブルのデータを表示させることはできますか? ウィザードを使って作成するとどうしても以下のようになってしまいます。 (ちなみに親テーブルと明細テーブルは伝票番号でリレーションしています) ↓↓↓↓ 伝票番号000001に対して、明細Aテーブル(2レコード)、明細Bテーブル(1レコード)あるとする。 ----------------------------------------------------------- 本来は以下のように表示したい ヘッダーセクション 伝票番号:000001 親テーブルの情報:xxxxxxx 詳細セクション 明細Aの情報 01 aaaaaaaa 明細Aの情報 02 aaaaaaaa 明細Bの情報 11 bbbbbbbb ------------------------------------------------------------ 実際は以下のように表示される ヘッダーセクション 伝票番号:000001 親テーブルの情報:xxxxxxx 詳細セクション 明細Aの情報 01 aaaaaaaa 明細Bの情報 11 bbbbbbbb 明細Aの情報 02 aaaaaaaa 明細Bの情報 11 bbbbbbbb
- ベストアンサー
- Visual Basic
- Sum・クエリ・テーブルの特定の合計をフォームのテキストボックスに表示したい
テーブル1に番号フォールドと金額フィールド(通貨型)があり、 番号 金額 001 \1 002 \2 003 \3 ・ ・ ・ とデータが入力されています。 フォーム1にテキスト0を設置しました。 そこに「番号001の金額フィールドの合計額を表示したい」のですが どうすればいいのでしょう? SQL文で言うと SELECT テーブル1.番号, Sum(テーブル1.金額) AS 金額の合計 FROM テーブル1 GROUP BY テーブル1.番号 HAVING (((テーブル1.番号)="001")); なので それを テキスト0のコントロールソースに "SELECT テーブル1.番号, Sum(テーブル1.金額) AS 金額の合計 FROM テーブル1 GROUP BY テーブル1.番号 HAVING (((テーブル1.番号)="001"));" と入れましたが ただテキストボックスにSQL文が表示されるだけでした。 (番号フィールドは主キーではなく重複するレコードもあります) どうすれば、いいのでしょうか? ご教授よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
お礼
ありがとう。