AS BEGIN select 仕入明細テーブル.物件CD, sum(仕入明細テーブル.金額) as 合計額
from ( select 仕入明細テーブル.物件CD, 仕入明細テーブル.金額, 仕入伝票テーブル.納品日
from 仕入明細テーブル inner join 仕入伝票テーブル on 仕入明細テーブル.[仕入伝票No]=仕入伝票テーブル.[仕入伝票No] where (仕入伝票テーブル.納品日 between '2011/12/01' and '2011/12/31') and 仕入明細テーブル.仕入費目CD=9 or 仕入明細テーブル.仕入費目CD=11 )
(仕入伝票テーブル.納品日 between '2011/12/01' and '2011/12/31') and
(仕入明細テーブル.仕入費目CD IN (9,11))
以上を勘案すると
select
TMP.物件CD,
sum(TMP.金額) as 合計額
from (
select
MEISAI.物件CD,
MEISAI.金額,
from
仕入明細テーブル as MEISAI inner join 仕入伝票テーブル as DENPYOU
on MEISAI.[仕入伝票No]=DENPYOU.[仕入伝票No]
where (
DENPYOU.納品日 between '2011/12/01' and '2011/12/31')
and (MEISAI.仕入費目CD in (9,11)
)
) as TMP
group by TMP.物件CD
1. 仕入明細テーブルと仕入伝票テーブルを[仕入伝票No]で内部結合する。
2. 中間結果表は物件CD列と金額列だけが含まれる
3. where 句 (DENPYOU.納品日 between '2011/12/01' and '2011/12/31') and (MEISAI.仕入費目CD in (9,11)で表が選択される。
4.生成した中間(Temporary)表に TMPという別名をつける。TMP表は内部結合したうち"物件CD"列と"金額"列だけが含まれる。
5. TMP表をFROM句にして物件CD列でgroup by し、集合関数sumでTMP表の金額列を処理する。
6. 集合関数sumの結果列は"合計額"という別名がつけられる。
select
TMP.物件CD,
TMP.物件名
TMP.客先名
sum(TMP.金額) as 合計額
from (
select MEISAI.物件CD, BUKKEN.物件名, KYAKUSAKI.客先名, MEISAI.金額
from 仕入明細テーブル as MEISAI
inner join 仕入伝票テーブル as DENPYOU
on MEISAI.仕入伝票No = DENPYOU.仕入伝票No
inner join 物件テーブル as BUKKEN
on MEISAI.物件No = BUKKEN.物件No
inner join 客先テーブル as KYAKUSAKI
on BUKKEN.客先No = KYAKUSAKI.客先No
where (
DENPYOU.納品日 between '2011/12/01' and '2011/12/31')
and (MEISAI.仕入費目CD in (9,11)
)
) as TMP
group by TMP.物件CD, TMP.物件名, TMP.物件名
ここまでできると60点。
実は
select MEISAI.物件CD, BUKKEN.物件名, KYAKUSAKI.客先名, sum(MEISAI.金額) as 合計額
from 仕入明細テーブル as MEISAI
inner join 仕入伝票テーブル as DENPYOU
on MEISAI.仕入伝票No = DENPYOU.仕入伝票No
inner join 物件テーブル as BUKKEN
on MEISAI.物件No = BUKKEN.物件No
inner join 客先テーブル as KYAKUSAKI
on BUKKEN.客先No = KYAKUSAKI.客先No
where (
DENPYOU.納品日 between '2011/12/01' and '2011/12/31')
and (MEISAI.仕入費目CD in (9,11)
)
group by MEISAI.物件CD, BUKKEN.物件名, KYAKUSAKI.客先名
でもいいはずというのはたっつぁん氏のご明察。
ただ、パフォーマンスを考えると、ただ捨てるためだけの内部結合はもったいないので
select MEISAI.物件CD, BUKKEN.物件名, KYAKUSAKI.客先名, sum(MEISAI.金額) as 合計額
from 仕入明細テーブル as MEISAI
inner join 仕入伝票テーブル as DENPYOU
on MEISAI.仕入伝票No = DENPYOU.仕入伝票No
and (DENPYOU.納品日 between '2011/12/01' and '2011/12/31')
and (MEISAI.仕入費目CD in (9,11))
inner join 物件テーブル as BUKKEN
on MEISAI.物件No = BUKKEN.物件No
inner join 客先テーブル as KYAKUSAKI
on BUKKEN.客先No = KYAKUSAKI.客先No
group by MEISAI.物件CD, BUKKEN.物件名, KYAKUSAKI.客先名