簡體   English   中英

滿足條件時,T-SQL 2008 INSERT虛擬行

[英]T-SQL 2008 INSERT dummy row WHEN condition is met

**架構 數據集**

id版本付款名稱
1 1 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完成處理后的最終集合,因此上面的所有內容都在一個表中,不幸的是我無法更改它。

我需要在數據集中確定在以前的版本中某人的付款總額大於0的地方被刪除,並插入一個付款為0的虛擬行。因此,在上面的示例中,Rich在版本3中已刪除了一筆付款以前的版本共有10個。 我需要首先確定在所有情況下發生此情況的位置,然后為該版本插入一個虛擬行,其付款為0。 史蒂夫(Steff)在版本3中也已刪除,但在先前版本中她的付款未超過0,因此她不需要虛擬行。

到目前為止已嘗試過 -因此,我在這里查看了pinal dave的示例,可以回顧上一行,它很棒,因此是朝正確方向邁出的一步。 但是,我不確定如何實現上述要求。 我一直在用案例陳述的想法,但是我不確定那是解決問題的最佳方法。 我真的很努力地解決這個問題,希望能就如何解決這個問題提供一些建議。

您可以通過生成名稱和版本的所有可能組合來完成此操作。 然后根據工資條件過濾掉您不想要的那些:

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 Fiddle。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM