我将使一个sql语句检索所有图像,只要大小的总和为100

我有这个:

SELECT PhotoNr
INTO # PhotoTabl
FROM Photo
WHERE Size <= 100????

ORDER BY PhotoOrder ASC

表内容:
PhotoNr ...... Size
1 ............ 20
2 ............ 50
3 ............ 20
4 ............ 50
5 ............ 20

sql将给出结果:
PhotoNr ...... Size
1 ............ 20
2 ............ 50
3 ............ 20

有什么好的解决方案吗?

最佳答案

有很多方法可以给这只猫蒙皮。最好的选择取决于您可以使用的内容以及尺寸等方面的限制

一种选择是使用递归CTE(此简单示例假定连续的photonr值,如果需要,可以连续使用非连续值):

;WITH CTE as (
  select PhotoNr, Size, Tot = Size
  from photos where photonr = 1
  union all
  select p.PhotoNr, p.Size, Tot = cte.Tot +p.Size
  from CTE
  join photos p on CTE.PhotoNr + 1 = p.photonr
  )
select photonr, size from cte
where tot < 100

SQL Fiddle Here

另外,一种非常简单的方法(编码)(但可能不那么有效)可以使用cross apply:
select
  photonr,
  size
from photos p
  cross apply (
    select tot = sum(size) from photos sub
    where sub.photonr <= p.photonr) x
where tot <= 100

Another SQL Fiddle Here

10-08 17:40