有人可以帮我吗?我正在尝试编写一个 SQL 查询并在 2-3 天内遇到问题。让我先定义问题。
我有 2 张桌子
Payment_Schedule_Master
[PAYMENT_SCHEDULE_MASTER_ID] [int] NOT NULL,主键 [FPI_ID] [varchar](9) 非空, [DELETE_FLAG] [char](1) 非空, [CREATED_BY] [varchar](30) 非空, [创建日期] [日期时间] 不为空, [MODIFY_BY] [varchar](30) 非空, [MODIFY_DATE] [日期时间] 非空
Payment_Schedule_Detail
[PAYMENT_SCHEDULE_DETAIL_ID] [int] IDENTITY(1,1) NOT NULL,主键 [PAYMENT_SCHEDULE_MASTER_ID] [int] NOT NULL,主表的外键 [PAY_YEAR] [int] 非空, [PAY_MONTH] [int] 非空, [实际] [钱] NULL, [预测] [钱] NULL, [DELETE_FLAG] [char](1) 非空, [CREATED_BY] [varchar](30) 非空, [创建日期] [日期时间] 不为空, [MODIFY_BY] [varchar](30) 非空, [MODIFY_DATE] [日期时间] 非空
两者之间存在一对多的关系:Master
有一个条目,detail
有多个。Payment_Schedule_Detail
有一个id
,外键,实际,预测和许多列。实际和预测中将包含数值。
问题:
我想得到那些等于 0的Payment_Schedule_Master
行。Actual
ForeCast
我的查询:
我试过这个查询
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_Id900
实际总和为 0,它不应该出现在结果中。但912
会出现在结果中,因为所有记录都是 0。我希望这会有所帮助。