【发布时间】:2022-06-15 05:09:34
【问题描述】:
我们正在尝试查看哪些工作订单在预算的 15% 以内或更多。目前,我有这个:
fnd.sort_code,
phs.shop,
SUM ( fnd.amount ) AS 'Spent',
CAST(phs.budget AS Decimal(9,2)) AS 'Budget'
FROM dbo.ae_p_phs_e phs
LEFT OUTER JOIN dbo.ae_s_fnd_a fnd ON (phs.proposal=fnd.proposal AND phs.sort_code=fnd.sort_code)
LEFT OUTER JOIN dbo.ae_p_pro_e pro ON (phs.proposal=pro.proposal)
WHERE
ROUND(CAST(fnd.amount / phs.budget AS Decimal(9,3)), 3) >= 0.85
AND
pro.status_code = 'OPEN'
AND
phs.budget > 0
GROUP BY fnd.proposal, fnd.sort_code, phs.shop, phs.budget
ORDER BY fnd.proposal ASC
它似乎返回了工作订单,但是当我根据数据库验证它们时,“fnd.amount”列似乎乘以 2、3、4,有时甚至是 5x。我注意到如果我从 WHERE 子句中删除 ROUND/CAST 语句,它将返回具有正确值的工单。
知道为什么我的过滤只乘以我的一个 SELECT 语句吗?
更新: 应要求,
基本上,如果查询返回上面设置的示例,我希望相关查询只返回满足 0.85 或以上阈值的查询(以黄色突出显示的那些)。
【问题讨论】:
-
请提供样本数据、实际结果和期望结果(作为一个最小的例子——我们不需要您的生产查询)。没有调查的最有可能的问题是您的联接正在复制您的基本行,因此是乘法。
-
@DaleK 对不起,通常如果我不发布我的查询/代码我会被禁止或大喊大叫,所以我出于习惯发布它。我将更新一些示例/期望的结果。
-
我们绝对需要您的查询,但您应该创建一个minimal reproducible example,即仍然可以证明您的问题的最小示例。通常在创建此类示例时,您将自己识别和解决问题。
标签: sql sql-server