1

realaを anintに、 afloatをanにキャストし、int次のように 2 つを比較しています。

  where
  cast(a.[SUM(PAID_AMT)] as int)!=cast(b.PAID_AMT as int) 

しかし、私はまだ2つが等しい結果を得ています。例えば:

+-----------+-----------+------------+------------+----------+
|   accn    |  load_dt  |   pmtdt    | sumpaidamt | Bpaidamt |
+-----------+-----------+------------+------------+----------+
| A133312   | 6/7/2011  | 11/28/2011 | 98.39      | 98.39    |
| A445070   | 6/2/2011  | 9/22/2011  | 204.93     | 204.93   |
| A465606   | 5/19/2011 | 10/19/2011 | 560.79     | 560.79   |
| A508742   | 7/12/2011 | 10/19/2011 | 279.65     | 279.65   |
| A567730   | 5/27/2011 | 10/24/2011 | 212.76     | 212.76   |
| A617277   | 7/12/2011 | 10/12/2011 | 322.02     | 322.02   |
| A626384   | 6/16/2011 | 10/21/2011 | 415.84     | 415.84   |
| AA0000044 | 5/12/2011 | 5/23/2011  | 197.38     | 197.38   |
+-----------+-----------+------------+------------+----------+

完全なクエリは次のとおりです。

select 
  a.accn,
  a.load_dt,
  a.pmtdt,
  a.[SUM(PAID_AMT)] sumpaidamt,
  sum(b.paid_amt) Bpaidamt
  from
  [MILLENNIUM_DW_DEV].[dbo].[Millennium_Payment_Data_May2011_July2012] a
  join
  F_PAYOR_PAYMENTS_DAILY b
  on
  a.accn=b.ACCESSION_ID
  and
  a.final_rpt_dt=b.FINAL_REPORT_DATE
  and
  a.load_dt=b.LOAD_DATE
  and
  a.pmtdt=b.PAYMENT_DATE
  where
  cast(a.[SUM(PAID_AMT)] as int)!=cast(b.PAID_AMT as int) 

  group by 
    a.accn,

  a.load_dt,
  a.pmtdt,
  a.[SUM(PAID_AMT)]

私は何を間違っていますか?等しくないレコードのみを返すにはどうすればよいですか?

4

2 に答える 2

3

なぜ問題があるのか​​わかりません。

クエリは、支払いの合計をb(sum(b.paid_amt)Bpaidamt)で返します。where句は、個々の支払いを比較しています。これは、複数の支払いがあることを意味します。

おそらくあなたの意図は、代わりにHAVING句を使用することです。

having cast(a.[SUM(PAID_AMT)] as int)!=cast(sum(b.PAID_AMT) as int)
于 2012-08-09T22:03:53.023 に答える
2

ラウンドとキャストステートメントを実行できます。

cast(round(sumpaidamt,2) as money) <> cast(round(Bpaidamt,2) as money)

それがどのように機能するかを示すSQL Fiddle http://sqlfiddle.com/#!3/4eb79/1

于 2012-08-13T11:29:37.563 に答える