質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

1304閲覧

SQLserverで,合計を別のテーブルから呼び出して,表示させたい

currystyle

総合スコア11

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2017/08/17 14:01

SQLserverの基礎的な練習を経たあと,
簡単な販売管理システムを作成しています。

そこで,
cust.csv
内の,id,name,mail,tel,amount (amountは顧客の支払い可能金額)
shouhin.csv
内の,id,cust,name,price

があり,顧客の各種データと,顧客ごとの商品の合計額と,顧客の支払い可能金額から商品の合計金額を差し引いたものを表示させたいです。
この合計の表示と差し引きの表示をSUMを使って行おうとしているのですが,
なぜか実現しません。

書いたコード
SELECT cust.id,cust.name,cust.mail,cust.tel,cust.amount,SUM(shouhin.amount),(amount - SUM(shouhin.amount)
FROM shouhin
JOIN cust ON shouhin.cust = cust.id
GROUP BY cust.id
ORDER BY cust.id;

SUMやgroupbyの使い方に問題があるのでしょうか。
なお,引き算の行を消した場合でも表示はなされません。

基礎的な質問で申し訳ないですが,宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

A.Ichiさんのものとほぼ同じですが、外部結合ではcustに対応するshouhinレコードがない場合にSUMの結果の列がNULLとなるため、COALESCE関数を使用しています。

sql

1SELECT 2 cust.id 3 ,cust.name 4 ,cust.mail 5 ,cust.tel 6 ,cust.amount 7 ,COALESCE(t1.goukei, 0) AS goukei 8 ,cust.amount - COALESCE(t1.goukei, 0) AS zangaku 9FROM 10 cust 11 LEFT OUTER JOIN ( 12 SELECT 13 cust 14 ,SUM(price) as goukei 15 FROM 16 shouhin 17 GROUP BY 18 cust 19 ) as t1 20 ON cust.id = t1.cust 21ORDER BY 22 cust.id 23;

投稿2017/08/18 05:06

SVC34

総合スコア1149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

currystyle

2017/08/20 08:49 編集

ありがとうございます。 COALESCE関数をまだ理解していないので,勉強します。
guest

0

MysqlでのSQLですが作成してみました。ご参考まで

SELECT cust.id,cust.name, cust.mail, cust.tel, cust.amount, t1.amount as kai, cust.amount - t1.amount as zan FROM (select cust, sum(amount) as amount from shouhin group by cust) as t1 JOIN cust ON t1.cust = cust.id ORDER BY cust.id;

投稿2017/08/17 23:21

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

currystyle

2017/08/20 08:41

ありがとうございます。 参考になりました。
guest

0

ベストアンサー

SQLserverの基礎的な練習を経たあと,
簡単な販売管理システムを作成しています。

まだ、基礎を習得できていないレベルです。
提示されたSQLはエラーになると思われるんですが、結果が表示されていますか?

group by が指定されると、select句で選択できるのはgroup byで指定された項目とその項目に対して1行となる結果だけです。

考え方として、顧客ごとなので、cust.csvとshouhin.csvを顧客単位で集計したものを結びつけます。
データ量などで、性能が変わる場合があるので、2つの例を挙げておきます。

全体の一覧として

SQL

1SELECT cust.*, shouhin.total 2FROM cust left join ( 3 select cust , sum(price) as total from shouhin group by cust 4) shouhin 5ON shouhin.cust = cust.id 6ORDER BY cust.id

特定の顧客などの条件があるとき(whereの条件が無ければ結果は最初のものと同じ)

SQL

1SELECT cust.* 2 , (select sum(price) from shouhin where cust=cust.id) as total 3FROM cust 4where id=xxxx 5ORDER BY id

投稿2017/08/17 14:45

編集2017/08/17 14:46
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

currystyle

2017/08/20 08:39

ありがとうございます。 できました。まだまだ基礎ができていなくて精進します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問