假设我有一个数据表,看起来像:

ItemNo    |    ItemCount   |    Proportion
------------------------------------------
1              3                0.15
2              2                0.10
3              3                0.15
4              0                0.00
5              2                0.10
6              1                0.05
7              5                0.25
8              4                0.20

换句话说,共有20个项目,每个ItemNo的累积比例之和为100%。表行的顺序在这里很重要。

是否可以执行不带循环或游标的SQL查询,以返回超过累积比例的第一个 ItemNo

换句话说,如果我要检查的“比例”是35%,则超出的第一行是ItemNo 3,因为0.15 + 0.10 + 0.15 = 0.40

类似地,如果我想找到第一行超过75%的行,那就是ItemNo 7,因为直到该行的所有Proportion的总和都小于0.75。

最佳答案

select top 1
  t1.ItemNo
from
  MyTable t1
where
  ((select sum(t2.Proportion) from MyTable t2 where t2.ItemNo <= t1.ItemNo) >= 0.35)
order by
  t1.ItemNo

10-06 13:38