こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

sqlについて

下に書いたsqlのコードの内容(どういう処理でどういう結果になるのか)が知りたいです。
どなたかわかる方教えてください。

select b.ym,
b.no,
    isnull(e.sumcnt,0)as val,
null as bunsi,
null as bunbo
from (select distinct ym,no from Table_A)b
inner join
(select ym from Table_B where cd=1)d
on b.ym=d.ym
left outer join
(select b1.ym,b1.no,sum(c1.cnt)as sumcnt
from Table_A b1
inner join
(select ym from Table_B where cd=1)d1
on b1.ym=d1.ym
inner join
Table_C c1
on b1.ym=c1.ym
group by b1.ym,b1no)e
on b.ym=e.ym
and b.no=e.no

投稿日時 - 2008-01-11 22:38:33

QNo.3671311

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

「どういう結果になるのか」は基本的にANo.1への補足どおりだと思いますけれど。

付け加えるとするなら Table_A.ym=Table_B.ym は満たすけれどそれに対応する Table_C.ym 値が存在しない行に対しても結果は出力される(※1)。その場合の Table_C.cntの集計値はゼロが出力される(※2)ということでしょうか。

※1 left outer join
※2 isnull()関数

投稿日時 - 2008-01-14 00:20:24

ANo.1

ym, no, cd, cnt の各列に格納されている値は何なのか。
Table_A, Table_B, Table_C の3表の役割は何が違うのか。

そういう前提の説明をまったくせずに他人に理解してほしいのなら,
列名・表名にしっかり意味を持たせてコードを書いてください。

投稿日時 - 2008-01-12 04:26:41

補足

すみません。補足説明です。
ym=年月日, no=店の番号(数値), cd=コード(数値), cnt=件数(数値)
まず、
ym と no が key となってます。
Table_B は no を持ってません。

Table_B の cd='1' であるもので、
Table_A の ym(年月日) と Table_B の ym(年月日)で一致する年月日を取得して、
Table_A.ym=Table_C.ym and Table_A.no=Table_C.no の条件で
Table_C.cnt を集計したいです。
よろしくお願いいたします・・・

投稿日時 - 2008-01-13 21:03:19

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-