【问题标题】:How to get WHERE clause to stop multiplying values in the SELECT statement?如何让 WHERE 子句停止 SELECT 语句中的值相乘?
【发布时间】: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


猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 2018-04-16
  • 2023-03-15
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多