首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在满足条件时,T-SQL 2008插入虚拟行

在满足条件时,T-SQL 2008插入虚拟行
EN

Stack Overflow用户
提问于 2014-07-19 11:51:00
回答 1查看 139关注 0票数 0

**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的付款,所以她不需要一个虚拟行。

尝试了到目前为止,-所以我看了皮纳尔戴夫的例子这里,我可以回顾前一行,这是很棒的,所以这是朝着正确的方向迈出的一步。然而,我不知道如何实现上述要求。我一直在玩弄一个案例陈述的想法,但我不确定这是否是最好的方法。我真的很纠结于这个问题,希望能就如何解决这个问题提供一些建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-19 12:05:34

您可以通过生成所有可能的名称和版本组合来做到这一点。然后根据薪资条件过滤掉那些你不想要的:

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24840084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档