1

私がやりたいことはかなり簡単だと思いますが、返されるデータは大きく異なります。

select sum(cast(vi.qty - vi.unredeemed as bigint))
  from red.dbo.setup vc
  full join red.dbo.test bt
    on bt.batch_no = vc.batch_no
  join red.dbo.live vi
 where vi.date_issued between '2012-01-01' and '2012-01-01' 
   and vc.denom ='1' 
   and substring(vi.issue_id,3,1) = '4'

私がやろうとしているのは、3つのテーブルを結合qtyし、結合の結果の合計を計算してから、未使用の合計を差し引いて、1行に使用済みの合計を算出することです。

合計フィールドにさまざまな修正を試みましたが、数が膨大になっているように見えるので、それらを増やしていると思います。

私はしばらくの間結合を使用していません、そして私は少しさびています。

4

2 に答える 2

1

参加している 2 番目の参加 (dbo.live) に条件を指定していません。別のことは、あなたが参加することだけに言及したことです。フルジョイントか左右ジョイントか。お客様の状態により異なります

于 2012-11-08T11:28:10.340 に答える
1

あなたの問題はON、2番目の句を省略したことですJOIN

select SUM(CAST(vi.QTY -vi.unredeemed as bigint))
from red.dbo.setup vc
FULL Join red.dbo.test bt on bt.batch_no = vc.batch_no
JOIN red.dbo.live vi ON ?? -- something needs to be added here, like vi.someId =vc.someOtherId

where vi.date_issued between '2012-01-01' and '2012-01-01' and vc.denom ='1' and      SUBSTRING(vi.ISSUE_ID,3,1) ='4'

そうです、あなたが観察した「乗算」効果は、ON句の欠落に起因するデカルト積によるものです。ON 句が指定されていない単純な JOIN は、CROSS JOINになります。

于 2012-11-08T11:28:28.627 に答える