2016-11-01 62 views
0

我確定這是否可能在SQL中,但是我的case語句和wheres的組合不起作用。這是我使用的形狀一些測試數據..SQL根據特定條件返回不同的行

enter image description here

它顯示了一個訂單項目。按照這個順序,客戶已經修改了鋼筆訂單並將金額增加到了15.因此,原訂單項id 123被標記爲取代,並且創建了新的項目行,編號爲158,並且PreviousVersion列被填充之前的項目itemId。 AmendedStatusId是修訂項目的狀態。因此,在示例ItemId 158中是ItemId 123的更新版本。並且額外的筆沒有被支付,因爲它們是AwaitingApproval。我知道這不是最好的佈局數據,但這是我需要處理的。

我想要做的是當修改的項目還沒有支付選擇舊項目,所以在這個例子中返回ItemIds 123和124.當ItemId 123的AmendedStatusId更新爲付費,我想返回ItemId 124和158.這可能嗎?

在此先感謝:)

+1

(1)用你正在使用的數據庫標記你的問題。 (2)如果訂單行更改多次,會發生什麼情況? –

+0

每次修改一個項目時,都會在表格中添加另一條記錄。所以新的變化看起來像ItemId 158,而以前的變化將類似於ItemId 123.希望這是有道理的。 – clueless83

+0

你怎麼知道124被鏈接到158/123? 124沒有出現在'PreviousVersion'列中。 –

回答

0

這種結構應該讓你開始。

select isnull(paidItemId, unpaidItemId) itemId 
from yourTables 
left join (subquery to identify paid items) paidItems on something 
left join (subquery to identify unpaid items) unpaidItems on something 
etc