我将使一个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