SQLで合計・総合計を出してたいのですが、どうしたらいいのですか?
教えてください
下記はこのような感じでデータベースがあった場合です
得意先:T_得意先.得意先番号
得意先名称:T_取引先.得意先名称
T_受注.工場番号 = T_取引先.取引先番号
T_受注.品目番号
T_受注.品目名
T_区分明細.区分明細名
T_受注.受注番号
T_受注.受注日
T_受注.納期
T_受注.受注数
T_受注.単位名
T_受注.単価
T_受注.仮単価区分
T_受注.金額
T_担当者.担当者名
--番号で名称を結合
品目名 = (T_品目.品目番号 = T_受注.品目番号)
単位名 = (T_単位.単位番号 = T_受注.単位番号)
担当者名 = (T_担当者.担当者番号 = T_受注.担当者番号)
--------------------
得意先合計:得意先ごとの「金額」合計
総合計:全得意先の「金額」合計
No.2ベストアンサー
- 回答日時:
まず書く前に自分の書いたものを見直すことをお勧めします。
a)
>品目名 → T_受注.品目番号 = T_品目.品目番号 と結合
>単位名 → T_単位.単位番号 = T_受注.単位番号 と結合
>で該当であっていました
以下が質問者さんが最初に書かれたレイアウトです。
T_受注.品目番号
T_受注.品目名
T_区分明細.区分明細名
T_受注.受注番号
T_受注.受注日
T_受注.納期
T_受注.受注数
T_受注.単位名
T_受注.単価
T_受注.仮単価区分
T_受注.金額
T_担当者.担当者名
結合条件はさすがに推測できましたが、結合している目的を考えてください。
T_受注.単位名
T_受注.品目名
は本当に合っていますか?合っていれば結合する必要がありませんよね。
b)
以下が質問者さんが最初に書かれた条件です。
得意先:T_得意先.得意先番号
得意先名称:T_取引先.得意先名称
T_受注.工場番号 = T_取引先.取引先番号
>T_取引先.得意先番号
>T_取引先.取引先名称 は T_受注.得意先番号 = T_取引先.得意先番号で
>同じ得意先番号で表示させます
>取引先番号ではなく得意先番号
>工場番号※ T_取引先参照 取引先名称表示
これが本当だとすると、T_得意先というマスタはなく、T_取引先のレイアウトは
T_取引先(取引先番号、得意先番号、取引先名称)
で、しかも取引先番号、得意先番号ともに一意制約(=ユニーク制約)
がついていることになりますが、それで合っていますか?
c)
>>羅列してある項目の中に「得意先」に関する情報が一切ないように見えます。
>>それでどうやって「得意先ごとの金額合計」の結果がそれぞれどの得意先のものか判断しますか?
この質問の意味が理解されていないようです。
最初に質問者さんの書いた戻り値のレイアウトには、得意先番号も取引先名称も含まれていません。
得意先別合計に表示できるのは、金額だけになってしまいます。
複数の得意先が含まれていた場合には、どの行がどの得意先のものかわからなくなってしまいます。
だから、レイアウトを見直すべきではないですか、と言いたかったのですが。
d)
>あとこのデータはVB.NETで工場番号を入力してSQLで呼び出します
ここまで書いても使っているデータベースが何かが出てきませんね。
前回書いたサンプルを読み解けず、定義も十分に示せないとすれば、質問者さんが合計や総合計は抜きにして、「今明細が正しく取得できているSQL文」を示していただいた方がよいと思います。
この回答への補足
ごめんなさい。
足らなくて
a)T_受注.単位名
T_受注.品目名 これは確認しましたが、本当にあっていました
品目名 → T_受注.品目番号 = T_品目.品目番号 と結合
>単位名 → T_単位.単位番号 = T_受注.単位番号 と結合
b)T_得意先というマスタはなく、T_取引先のレイアウトは
T_取引先(取引先番号、得意先番号、取引先名称)
で、しかも取引先番号、得意先番号ともに一意制約(=ユニーク制約)
がついていることになりますが、それで合っていますか?
回答:確認しましたが、合っています
<捕捉>
・得意先合計(受注数 * 単価)得意先毎の金額合計
・総合計(金額)算得意先の金額合計
・T_M_区分明細区分明細名をT_区分.区分番号を'01'を表示
・工場番号を貢献する(order by 工場番号)
データベース:Microsoft SQL Server Management Studio Express
今、作成中のSQL
SELECT
T_受注残.得意先番号,
T_取引先.得意先番号,
T_取引先.取引先略名,
T_受注残.品目番号,
T_品目.品目名,
--T_区分明細.区分明細名,
T_受注残.受注番号,
T_受注残.受注日,
T_受注残.納期,
T_受注残.受注数,
T_単位.単位名,
T_受注残.単価,
T_受注残.仮単価区分,
T_受注残.金額,
T_担当者.担当者名
FROM T_受注残
INNER JOIN T_品目 ON T_品目.品目番号 = T_受注残.品目番号
INNER JOIN T_単位 ON T_単位.単位番号 = T_受注残.単位番号
INNER JOIN T_担当者 ON T_担当者.担当者番号 = T_受注残.売上担当者
INNER JOIN T_取引先 ON T_取引先.得意先番号=T_受注残.得意先番号
UNION ALL
SELECT
T_取引先.得意先番号,
T_取引先.取引先略名,
--T_受注残.得意先番号,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
SUM(T_受注残.単価 * T_受注残.受注数) as 得意先合計,NULL
FROM T_受注残
INNER JOIN T_取引先 ON T_取引先.得意先番号=T_受注残.得意先番号
GROUP BY T_取引先.得意先番号,T_取引先.取引先略名,T_受注残.得意先番号
UNION ALL
SELECT
NULL,'総合計',
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
SUM(T_受注残.金額),NULL
FROM T_受注残
GROUP BY 工場番号
得意先番号 得意先番号 取引先名称 品目番号 品目名 受注番号 受注日 納期 受注数 単位 単価 仮単価区分 金額 担当者名
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 1 北海道 K1 机 11 2008-09-03 00:00:00.000 2008-10-06 00:00:00.000 3.000個 12.00000000 36.000000000 佐藤
1 1 北海道 K2 いす 12 2008-09-03 00:00:00.000 2008-10-06 00:00:00.000 3.000個 13.00000000 39.000000000 佐藤
2 2 沖縄 K3 電車 13 2008-09-03 00:00:00.000 2008-10-06 00:00:00.000 3.000式 14.00000000 42.000000000 高橋
得意先合計 75.000000000
総合計 117.000000000
No.3
- 回答日時:
a)「・T_M_区分明細区分明細名をT_区分.区分番号を'01'を表示」というのが純粋に日本語として理解できないです。
T_区分.区分番号='01'の場合だけデータを抽出したいのですか?
T_区分.区分番号='01'の場合だけT_区分明細.区分明細名を表示したいのですか?
それから、T_区分明細、T_区分およびT_受注残のJOINキーをおしえてください。
b)3つのSELECT文は項目の数が同じになるようにNULLの数を調整してください。
(UNION ALLは3つのSELECT文を単につないでいるだけです)
c)T_受注残.得意先番号とT_取引先.得意先番号と両方SELECTする必要はありません。両者は必ず同じ値ですから、どちらか1つだけにすべきです。
d)最後のGROUP BY 工場番号は不要です。
e)「工場番号を貢献する(order by 工場番号)」は、前に書かれた「あとこのデータはVB.NETで工場番号を入力してSQLで呼び出します」というのと矛盾しています。
工場番号を指定してSQLを実行するわけですから、工場番号は1つに絞られるのではないですか?
(ちなみに)
>T_受注.単位名、T_受注.品目名 これは確認しましたが、本当にあっていました。
クエリにはT_受注.単位名、T_受注.品目名ではなく、T_単位.単位名,T_品目.品目名って書いていますよね。
T_受注というテーブルには単位名も品目名も存在しないので、T_受注.単位名、T_受注.品目名という書き方は誤りだということです。クエリの方あっていることが確認できましたから、いいのですが。
No.1
- 回答日時:
・基本構文をおさえたあとは、「すべてのDBMSで動くSQL文」という考え方が難しくなってきます。
したがって、そのSQLを実行しようとしているデータベースの種類は明記すべきです。そうでないと、情報処理技術者試験のように標準SQLでサポートされている機能のみしか回答がつけられません。
(ROLLUPなどを使えるケースでもサポートしているDBMSが限られるのでそれを使った回答はできなくなります)
・質問をアップするときに、以下の点に留意ください。
a)書かれている項目のリストがSELECT文の戻り項目なのでしょうが、間違っていませんか?(T_受注.品目名、T_受注.単位名はT_品目.品目名、T_単位.単位名であるべきですよね)
b)羅列してある項目の中に「得意先」に関する情報が一切ないように見えます。それでどうやって「得意先ごとの金額合計」の結果がそれぞれどの得意先のものか判断しますか?
上にあるb)のため、明細と合計、総合計を一緒に表示できないので、
項目にはT_取引先.取引先番号,T_取引先.得意先名称も追加し、
明細・得意先別合計・総合計をまとめて表示するためにデータ区分の項目も追加した例を示します。
そのまま使えるとは思いませんが、ポイントは理解できると思います。
SELECT
1 区分,
T_取引先.取引先番号,
T_取引先.得意先名称,
T_受注.品目番号,
T_品目.品目名,
T_区分明細.区分明細名,
T_受注.受注番号,
T_受注.受注日,
T_受注.納期,
T_受注.受注数,
T_単位.単位名,
T_受注.単価,
T_受注.仮単価区分,
T_受注.金額,
T_担当者.担当者名
FROM T_受注
INNER JOIN T_品目 ON T_品目.品目番号 = T_受注.品目番号
INNER JOIN T_単位 ON T_単位.単位番号 = T_受注.単位番号
INNER JOIN T_担当者 ON T_担当者.担当者番号 = T_受注.担当者番号
INNER JOIN T_取引先 ON T_取引先.取引先番号=T_受注.工場番号
UNION ALL
SELECT
2 区分,
T_取引先.取引先番号,
T_取引先.得意先名称,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
SUM(T_受注.金額),NULL
FROM T_受注
INNER JOIN T_取引先 ON T_取引先.取引先番号=T_受注.工場番号
GROUP BY T_取引先.取引先番号,T_取引先.得意先名称
UNION ALL
SELECT
3 区分,
NULL,'総合計',
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
SUM(T_受注.金額),NULL
FROM T_受注
ORDER BY 1
この回答への補足
a)書かれている項目のリストがSELECT文の戻り項目なのでしょうが、間違っていませんか?(T_受注.品目名、T_受注.単位名はT_品目.品目名、T_単位.単位名であるべきですよね)
これらは調べてみましたが、
品目名 → T_受注.品目番号 = T_品目.品目番号 と結合
単位名 → T_単位.単位番号 = T_受注.単位番号 と結合
データ表示
で該当であっていました
b)羅列してある項目の中に「得意先」に関する情報が一切ないように見えます。それでどうやって「得意先ごとの金額合計」の結果がそれぞれどの得意先のものか判断しますか?
T_取引先.得意先番号
T_取引先.取引先名称 は T_受注.得意先番号 = T_取引先.得意先番号で同じ得意先番号で表示させます
取引先番号ではなく得意先番号
工場番号※ T_取引先参照 取引先名称表示
なお、かいたリストにT_区分明細.区分明細名はT_区分.区分番号 = '01'で表示します
T_受注.工場番号 ,T_取引先.得意先番号で番号が一致するデータを呼びます
あとこのデータはVB.NETで工場番号を入力してSQLで呼び出します
記入漏れがあったのですみませんが、またよろしくお願いします
作成していただいたSQLは参考にしてやってみましたが、思うようにいきません
なにぶんSQL初心者なんで、すみませんが、お願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelグラフについて 1 2023/05/12 16:26
- Amazon Amazonで注文した商品をローソンで受け取りにしているのですがコロナにかかってしまい取りにいけなく 4 2022/08/22 10:55
- その他(データベース) Excel VBA 転記について 1 2022/04/20 16:55
- その他(ニュース・時事問題) 「談合」(相談し合う?)は、すべて”悪”ですか?? 8 2023/02/09 22:33
- その他(IT・Webサービス) [PayPay銀行キャッシュカード拾得の件] このメールは本物か? 6 2022/09/15 21:52
- その他(データベース) accessについて 2 2022/05/31 16:58
- デジタルカメラ ヨドバシでネット注文した商品は自宅まで届きますか? 7 2022/04/14 19:20
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- ヤフオク! 関税 詐欺でしょうか?ヤフオク 3 2023/06/25 11:22
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あるフィールドの最大値を条件...
-
Accessフォーム全レコードをPDF...
-
ACCESS VBA クエリを開く
-
フィールド名が取得したい
-
アクセスのテーブルを分ける理...
-
SQL Server 2005 Expressで営業...
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Access テキスト型に対する指定...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルの値をテキス...
-
必須入力項目と入力必須項目
-
Accessのフィールド数が255しか...
-
【Access】フォームで自動計算...
-
Accessでコードを入れると名前...
-
エクセルグラフの凡例スペース
-
変数が選択リストにありません
-
Access VBAでクエリーのレコー...
-
ACCESSのクエリで集計で、先頭...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでのフォームの連携について
-
accessでの請求管理について
-
あるフィールドの最大値を条件...
-
MS ACCESS 商品価格変更時の該...
-
Access2021 「ISNULL関数には引...
-
Accessフォーム全レコードをPDF...
-
usingの意味がわからないのですが
-
アクセスのテーブルを分ける理...
-
Accessの帳票フォームで重複デ...
-
ACCESS VBA クエリを開く
-
集計結果を別テーブルに更新ク...
-
Accessについて(DLOOKUP関数、...
-
SQL EXISTS演算子について
-
accessについて
-
曜日を表す項目
-
Accessでクエリの作成、多対1対...
-
フィールド名が取得したい
-
SQL文でのDISTINCT
-
SQL Server 2005 Expressで営業...
-
SQLで合計表示
おすすめ情報