我有一个存储过程,它连接到其他表以计算一个百分比,我称之为column called 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 |
+------------------------------------+
我的预期结果是回报 TotalPercentage
不到100
例如:
+------------------------------------+
| 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
2条答案
按热度按时间brgchamk1#
您的尝试失败,因为您正在分组前进行筛选,而您要计算
sum()
首先,然后过滤。你的问题似乎比需要的复杂得多。这几个级别的子查询没有意义。您可以选择、筛选、聚合、排序和限制,而无需任何嵌套。要对聚合结果进行筛选,可以使用
having
条款:不清楚是什么别名
mpr
与原始查询中的相关(目前的情况是,这是一个语法错误)。查询只处理一个表,所以我只是取消了所有标识符的限定。kpbpu0082#
一种方法是使用cte并从cte中删除不需要的值
这只是一种方法
另一种方法是通过在组中添加having子句
这样地