SQLの質問です。
SQL Server 2008 R2 を使っている初心者です。
下の2つのテーブルがあります。
1)売上情報 table_uriage
・uriage_id
・user_id
・uriage_date
・uriage_kingaku
2)入金情報 table_nyukin
・nyukin_id
・user_id
・nyukin_date
・nyukin_kingaku
この2つのテーブルに対して、同じ期間を指定して、集計表(ユーザー毎の合計)を
作りたいと思っています。別々の表にするには何の問題もないのですが、
問題は2つのSQLの結果を1つの表にしたいのですが、SQLをどのように組んだらいいか
わかりません。
具体的な表としては、
user_id uriage_total nyukin_total
========================================
001 11111 22222
002 33333 44444
003 55555 66666
みたいな感じになればいいのです。
どなたか教えて下さい。
よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ごく普通の結合条件+集計なのでこんな感じです。
select
u.user_id,
sum(u.uriage_kingaku) uriage_total,
sum(n.nyukin_kingaku) nyukin_total
from table_uriage u
inner join
table_nyukin n
on u.user_id = n.user_id
group by u.user_id
ただし、売上と入金のデータがINSERTされるタイムラグが考えられるので、「売上が先にできる」と言う前提で書くと、外部結合を使ってこうなります。
select
u.user_id,
sum(u.uriage_kingaku) uriage_total,
sum(n.nyukin_kingaku) nyukin_total
from table_uriage u
left join
table_nyukin n
on u.user_id = n.user_id
group by u.user_id
※MSSQL手元にないので未検証
早速の回答、ありがとうございました。
「inner join」を使ったやり方ですと、売上と入金の両方がないと一覧に出てきませんでした。
「left join」を使ったやり方ですと、売上があって、入金がなかったものは「NULL」として出てくるのですが、
売上がないと、入金があっても一覧に表示されません。
売上と入金のどちらかがあれば出力したいと考えています。
また、入金の数値が、本来の数値の7倍,8倍となって出力されます。
どうしてなんでしょうか。
この辺のところご指導下さい。
No.2
- 回答日時:
♯1です。
>売上がないと、入金があっても一覧に表示されません。
>売上と入金のどちらかがあれば出力したいと考えています。
その場合は、完全外部結合を使ってこうなります。
select
u.user_id,
sum(u.uriage_kingaku) uriage_total,
sum(n.nyukin_kingaku) nyukin_total
from table_uriage u
full outer join
table_nyukin n
on u.user_id = n.user_id
group by u.user_id
>また、入金の数値が、本来の数値の7倍,8倍となって出力されます。
uriage_total、nyukin_totalなのでSUMでサマリしているのですが、その値が想定される値と異なる、と言う事でしょうか?
(もし、そうなら可能な範囲でデータ内容を提示してください)
そうではなくて、uriage_kingakuとnyukin_kingakuには既にサマッた値が入っている、と言う事であれば、単純にサマリをやめればよいだけです。
(トランザクションデータの有りようとしては微妙ですが。。。)
↓
select
u.user_id,
u.uriage_kingaku uriage_total,
n.nyukin_kingaku nyukin_total
from table_uriage u
full outer join
table_nyukin n
on u.user_id = n.user_id
No.3
- 回答日時:
ちょっと噛み合ってないような気がするので。
。>また、入金の数値が、本来の数値の7倍,8倍となって出力されます。
JOINの対象となっているキーが両方とも主キーではないので、当然ながらそうなります。
一旦それぞれのテーブルを集計してから結合するか、UNIONを使うのが一般的だろうと思います。
○一旦集計してからFULL OUTER JOINする
select
isnull(u.user_id,n.user_id) user_id,
isnull(u.uriage_total,0) uriage_total,
isnull(n.nyukin_total,0) nyukin_total
from
(select user_id,sum(uriage_kingaku) uriage_total
from table_uriage
group by user_id) u
full outer join
(select user_id,sum(nyukin_kingaku) nyukin_total
from table_nyukin
group by user_id) n
on u.user_id = n.user_id
○UNIONしてから集計する
select
user_id,
isnull(sum(uriage_kingaku),0) uriage_total,
isnull(sum(nyukin_kingaku),0) nyukin_total
from (
select user_id,uriage_kingaku,0 nyukin_kingaku
from table_uriage
union all
select user_id,0,nyukin_kingaku
from table_nyukin) tmp
group by user_id
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- PHP MySql PHP 2つのテーブルをJOINで結合 user_idで抽出 1 2023/01/03 14:04
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- SQL Server SQL 期間内の実施数を合計したい 2 2023/03/03 22:28
- JavaScript html javascriptにてWeb SQLを操作したい。 2 2022/12/16 17:43
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- SQL Server SQLのクエリの書き方 1 2022/03/29 23:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
同一のユーザー、同一商品のと...
-
マイクラPC版のコマンドで効率...
-
テーブル名を省略して「h.id」...
-
副問合せの書き方について
-
複数テーブルのGROUP BY の使い...
-
select文のwhere句に配列を入れ...
-
SQLで残高計算
-
クエリ表示と、ADOで抽出したレ...
-
php+MySQLでレコードが何行目か...
-
select文で特定のIDを抽出しupdate
-
MySQLでのバイナリデータ削除方法
-
sqlで、600行あるテーブルを100...
-
SQL Left Join で重複を排除す...
-
書籍の内容はまともでしょうか?
-
MySQLのint型で001と表示する方...
-
【MySQL】本当に困っているので...
-
SQLサーバから、項目の属性(型...
-
SELECT/別テーブルのレコード...
-
AUTO_INCREMENTのあるテーブル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
select文のwhere句に配列を入れ...
-
selectした大量データをinsert...
-
センノシド異性体構造式
-
Unionした最後にGROUP BYを追加...
-
insertを高速化させたい
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
sqlで、600行あるテーブルを100...
-
エクセルの関数について教えて...
-
Access パラメータクエリをcsv...
-
URL と行番号の指定
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
おすすめ情報