有人能幫我嗎?我正在嘗試編寫一個SQL查詢並在2-3天內遇到問題。讓我先定義問題。一對多sql查詢性能不錯
我有2個表
Payment_Schedule_Master
[PAYMENT_SCHEDULE_MASTER_ID] [int] NOT NULL, Primary key [FPI_ID] [varchar](9) NOT NULL, [DELETE_FLAG] [char](1) NOT NULL, [CREATED_BY] [varchar](30) NOT NULL, [CREATED_DATE] [datetime] NOT NULL, [MODIFY_BY] [varchar](30) NOT NULL, [MODIFY_DATE] [datetime] NOT NULL
Payment_Schedule_Detail
[PAYMENT_SCHEDULE_DETAIL_ID] [int] IDENTITY(1,1) NOT NULL, Primary key [PAYMENT_SCHEDULE_MASTER_ID] [int] NOT NULL, Foreign key to master table [PAY_YEAR] [int] NOT NULL, [PAY_MONTH] [int] NOT NULL, [ACTUAL] [money] NULL, [FORECAST] [money] NULL, [DELETE_FLAG] [char](1) NOT NULL, [CREATED_BY] [varchar](30) NOT NULL, [CREATED_DATE] [datetime] NOT NULL, [MODIFY_BY] [varchar](30) NOT NULL, [MODIFY_DATE] [datetime] NOT NULL
有一個一對多relati兩者之間的關係:Master
有一個條目並且detail
有很多。 Payment_Schedule_Detail
有一個id
,外鍵,實際,預測和很多列。實際和預測將包含數值。
問題:
我想那些Payment_Schedule_Master
行具有Actual
和ForeCast
等於0
我的查詢:
我嘗試這個查詢
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
有200在一月和二月-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,它不應該出現的結果。但912
將出現在結果中,因爲所有記錄都是0.我希望這有助於。
你能定義「好」的表現嗎?什麼是你的查詢的解釋計劃和你的表格的結構? – Ben
好的表現是在1秒內。 –
我用模式更新了這個問題。 –