誰か助けてくれませんか?SQL クエリを作成しようとしていますが、2 ~ 3 日間問題が発生しています。最初に問題を定義させてください。
私は2つのテーブルを持っています
Payment_Schedule_Master
[PAYMENT_SCHEDULE_MASTER_ID] [int] NOT NULL、主キー
[FPI_ID] [varchar](9) NOT NULL、
[DELETE_FLAG] [char](1) NOT NULL、
[CREATED_BY] [varchar](30) NOT NULL、
[作成日] [日時] NOT NULL、
[MODIFY_BY] [varchar](30) NOT NULL、
[MODIFY_DATE] [日時] NOT NULL
Payment_Schedule_Detail
[PAYMENT_SCHEDULE_DETAIL_ID] [int] IDENTITY(1,1) NOT NULL、主キー
[PAYMENT_SCHEDULE_MASTER_ID] [int] NOT NULL、マスター テーブルへの外部キー
[PAY_YEAR] [int] NOT NULL、
[PAY_MONTH] [int] NOT NULL、
[実際] [お金] NULL、
[FORECAST] [お金] NULL,
[DELETE_FLAG] [char](1) NOT NULL、
[CREATED_BY] [varchar](30) NOT NULL、
[作成日] [日時] NOT NULL、
[MODIFY_BY] [varchar](30) NOT NULL、
[MODIFY_DATE] [日時] NOT NULL
2 つの間には 1 対多の関係があります。つまり、 Master1 つのエントリがあり、複数のエントリdetailがあります。Payment_Schedule_Detail、id外部キー、実績、予測、および多数の列があります。実績と予測には数値が含まれます。
問題: 0に等しい行
を取得したい。Payment_Schedule_MasterActualForeCast
私のクエリ:
このクエリを試しました
Select
t.PAYMENT_SCHEDULE_MASTER_ID, psm.FPI_ID,
t.ActualSum, t.ForecastSum
from
(Select
SUM(Actual) As ActualSum,
SUM (forecast) AS ForecastSum,
PAYMENT_SCHEDULE_MASTER_ID
from
[dbo].[PAYMENT_SCHEDULE_DETAIL]
group by
PAYMENT_SCHEDULE_MASTER_ID) t
Inner Join
dbo.PAYMENT_SCHEDULE_MASTER psm on psm.PAYMENT_SCHEDULE_MASTER_ID = t.PAYMENT_SCHEDULE_MASTER_ID
where
t.ActualSum = t.ForecastSum
and t.ActualSum = 0
このクエリの問題はActual、1 月に 200 で 12 月に -200 の場合、SUM (Actual)間違っている 0 になるため、そのタイトルも選択されることです。
実際の 0 と予測 0 を持つタイトルのみを取得するようにクエリを変更する方法がわかりません。
テスト:
また、誰かがメソッドをテストする方法を教えてくれますか?
更新:このクエリを試しましたが、8 秒かかります。
Select
t.PAYMENT_SCHEDULE_MASTER_ID, psm.FPI_ID,
t.ActualSum, t.ForecastSum, psd.ACTUAL, psd.FORECAST
from
(Select
SUM(Actual) As ActualSum, SUM (forecast) AS ForecastSum,
PAYMENT_SCHEDULE_MASTER_ID
from
[dbo].[PAYMENT_SCHEDULE_DETAIL]
group by
PAYMENT_SCHEDULE_MASTER_ID) t
Inner Join
dbo.PAYMENT_SCHEDULE_MASTER psm on psm.PAYMENT_SCHEDULE_MASTER_ID = t.PAYMENT_SCHEDULE_MASTER_ID
Inner Join
[dbo].[PAYMENT_SCHEDULE_DETAIL] psd on psm.PAYMENT_SCHEDULE_MASTER_ID = psd.PAYMENT_SCHEDULE_MASTER_ID
where
t.ActualSum = t.ForecastSum
and t.ActualSum = 0
and psd.ACTUAL = 0
order by
psm.FPI_ID
データと出力:
psm_id Actual ForeCast [other columns]
900 10000.00 0.00
900 -10000.00 0.00
900 0.00 0.00
912 0.00 0.00
912 0.00 0.00
912 0.00 0.00
psm_id = Payment_Schedule_Master_ID
Payment_Schedule_Master_Id 実績900の合計は 0 になります。結果には表示されません。すべてのレコードが9120 だったので、結果に表示されます。これがお役に立てば幸いです。