【发布时间】:2012-07-23 19:33:57
【问题描述】:
我有一个名为 Sales 的表:
id_sale id_ticket total state
------- --------- ----- -----
100 100 30 inactive
101 101 30 active
102 101 60 active
103 102 30 active
104 102 30 active
105 103 10 active
106 103 5 active
我需要的是在状态处于活动状态时获取total 列的总和(总和)并将其乘以 x 百分比(我可以这样做),因此我必须选择所有票他们的总和(所有票的总和)是<= sum(total) * x percentage 并将其复制到另一个表(相同的值)
所以如果我有 101 票的总和 = 90 票的总和 102 票的总和 = 60 票的总和 103 票的总和 = 15,并且总和(总)*x 百分比 = 160,查询将只返回所有门票 101 和 102 的信息。
读了一上午,我发现了一个代码,它以某种方式完成了我需要的事情,但使用的是 id_Sales 而不是 id_ticket:
select t1.id_sale, t1.total, SUM(t2.total) as sum
from sales t1
inner join sales t2 on t1.id_sale >= t2.id_sale
where t2.state='active'
group by t1.id_sale, t1.total
having sum(t2.total)<=(
select sum(total)*.65
from sales
where state='active')
order by t1.id_sale
我希望收到的是:
id_sale id_ticket total state
------- --------- ----- -----
101 101 30 active
102 101 60 active
103 102 30 active
104 102 30 active
其中 101 票和 102 票之和为
所以 101 和 102 之和 = 150 和 sum(total)*x = 160(例如)
我怎样才能做我需要的事情,或者我怎样才能编辑这段代码,让它做我正在寻找的事情。
【问题讨论】:
-
感谢您发布示例数据,但您能否发布您需要的预期结果示例?
-
我希望我可以 +10 @bluefeet 的评论。很高兴知道您尝试的查询,但我们大多数人更愿意知道您实际期望的结果。
-
第二步的票单怎么选(这里要涨到160但不超过)票号asc?
标签: sql-server sql-server-2005 sum