【发布时间】:2020-10-22 11:44:33
【问题描述】:
我有一个存储过程,它连接到其他表来计算一个百分比,我将其称为mp.PrTotal 的列重命名为TotalPercentage,我将用于图表。由于一些不良数据,有一些TotalPercentage 大于 100% 应该返回。
所以我试图在其上添加一个过滤器,类似于SELECT ... WHERE TotalPercentage is less than or equal to 100 的逻辑。在尝试了几次不同的迭代之后。我仍在返回大于 100 的百分比。
解决这个问题的最佳方法是什么?
我已尝试添加WHERE mp.PrTotal <= 100
这是我的返回结果示例:
+------------------------------------+
| StateId ProductId TotalPercentage|
+------------------------------------+
| 1 12 0.21 |
| 1 10 102.34 |
| 1 341 87.30 |
| 1 21 62.1 |
| 1 73 100.32 |
+------------------------------------+
我的预期结果是返回小于 100 的 TotalPercentage
例如:
+------------------------------------+
| StateId ProductId TotalPercentage|
+------------------------------------+
| 1 12 0.21 |
| 1 341 87.30 |
| 1 21 62.1 |
+------------------------------------+
这是我的存储过程:
select top 10
StateId,
ProductId,
TotalPercentage,
from
(select
i.StateId,
i.ProductId,
sum(PrTotal) as TotalPercentage
from
(select
mp.StateId,
mp.ProductId,
mpr.PrTotal,
from
dbo.MpTotals mp
where
mp.StateId = @StateId
and mp.ProductId = @ProductId
and mp.PrTotal <= 100 -- filter attempt
) i
group by
i.StateId, i.ProductId, )
order by
TotalPercentage desc
【问题讨论】:
-
如果您可以提供带有一些重现问题的示例数据的创建表脚本可能会有所帮助 - 然后人们可以专注于查询。您希望他们尽可能轻松地为您提供帮助。
标签: sql sql-server select stored-procedures having-clause