**Schema & Dataset**
id版本支付名称
11 10富
2 1 0戴维
3 1 10马克
4 1 10杰斯
5 1 0斯特夫
1 2 10富
2 2 0大卫
3 2 10马克
4 2 10杰斯
5 2 0斯特夫
2 3 0戴维
3 3 10马克
4 3 10杰斯
http://sqlfiddle.com/#!3/1c457/18 -包含我的架构和我正在使用的数据集。
背景
上面的数据是存储的proc完成处理后的最后一组数据,因此上面的所有内容都在一个表中,不幸的是,我无法更改它。
我需要在dataset中标识某个人在以前版本中的支付总额大于0的情况下被删除,并插入一个支付为0的虚拟行。因此,在上面的示例中,Rich在第3版中已被删除,以前版本的支付总额为10。我需要首先确定在所有情况下都发生了这种情况,并为该版本插入一个带有0支付的虚拟行。Steff在第3版上也被删除了,但是在以前的版本中,她还没有得到超过0的付款,所以她不需要一个虚拟行。
尝试了到目前为止,-所以我看了皮纳尔戴夫的例子这里,我可以回顾前一行,这是很棒的,所以这是朝着正确的方向迈出的一步。然而,我不知道如何实现上述要求。我一直在玩弄一个案例陈述的想法,但我不确定这是否是最好的方法。我真的很纠结于这个问题,希望能就如何解决这个问题提供一些建议。
发布于 2014-07-19 12:05:34
您可以通过生成所有可能的名称和版本组合来做到这一点。然后根据薪资条件过滤掉那些你不想要的:
select n.name, v.version, coalesce(de.payment, 0) as payment
from (select name, max(payment) as maxpay from dataextract group by name) n cross join
(select distinct version from dataextract) v left outer join
dataextract de
on de.name = n.name and de.version = v.version
where de.name is not null or n.maxpay > 0;这里是一个SQL。
https://stackoverflow.com/questions/24840084
复制相似问题