0
私は2つのソースからの請求書データを持っています。 1組のレコードがどこにあるのか、もう一方のレコードにないレコードがあるかどうかを確認できるように、それらのレコードに参加したいと思います。このクエリは私が望むことをしますが、よりエレガントに書くことができるように感じますか?口座番号と請求書日付(MとY)のフィールドを1つだけ必要とし、各ソースの料金のフィールドを区切ります。この完全外部結合クエリを簡略化できますか?
DECLARE @BillDate datetime ='2/1/2016'
SELECT ACCT_NO = COALESCE(BPFACCT,CSTACCT) ,
BillDate = COALESCE(BPFBillDate,CSTBillDate) ,
BPFCharge ,
CSTCharge ,
Delta = ROUND(COALESCE(BPFBill.BPFCharge,0)-COALESCE(CSTBill.CSTCharge,0),2)
FROM
(
SELECT
BPFACCT = acct_no ,
BPFBillDate = cast(billdate as date) ,
BPFCharge = SUM(charge)
FROM
cisbill b
JOIN
cisbilldetail bd ON b.billid=bd.billid
WHERE
billdate>[email protected]
AND
billdate<DATEADD(MONTH, 1, @BillDate)
GROUP BY
acct_no, billdate
) BPFBill
FULL OUTER JOIN
(
SELECT CSTACCT = acct_no ,
CSTBillDate = cast(bill_date as date) ,
CSTCharge = SUM(new_charges)
FROM
cst_bill
WHERE
bill_date>[email protected]
AND
bill_date<DATEADD(MONTH, 1, @BillDate)
GROUP BY
acct_no, bill_date
) CSTBill
ON BPFBill.BPFACCT=CSTBill.CSTACCT
AND
BPFBill.BPFBillDate=CSTBill.CSTBillDate
フィードバックをお寄せください。
あなたは、SQL Serverが、そのためにインデックスを使用することはできません、検索条件の関数を使うべきではありません。値20160201の日付変数を使用し、 'bill_date> = @ビルモンとbill_date
' group by billdate'は実際にここで働いていますか? – JamieD77
@JamesZ - ありがとう、日付のうちの1つが時間の部分を持っていたので、私はそこにそれを今日持っていたのです。@ JamieD77 - はい、cst_billの月の2つのレコードを持つことが可能です – neuralgroove