我一直在嘗試各種方式來獲取我需要的格式的數據,但無濟於事。我需要合併3個表格,顯示1個表格中的所有內容,並添加一個顯示錶格2中RECENT最大值的額外列,但要考慮表3中的條件。顯示錶格將更有意義... I'我簡化了表格。因此,這裏的工作單表:如何在基於條件的SQL中獲取最新值
workorderid wonum siteid
1000 5000 SITE1
1001 5001 SITE1
1002 5002 SITE1
1003 5003 SITE1
1004 5000 SITE2
1005 5001 SITE2
1006 5002 SITE2
1007 5004 SITE1
我需要使用wonum和SITEID得到pay_value - 但可以有每個工作秩序多次付款。我需要獲得付款尚未取消的最新付款。不幸的是,這是在purchase_req表中保存的。這是payment_wos表
wonum_ref siteid pay_numref pay_value
5000 SITE1 12345 1000.00
5001 SITE1 12345 1023.52
5002 SITE1 12346 52.32
5003 SITE1 12347 452.12
5000 SITE2 12348 154.21
5000 SITE1 12347 852.25
5001 SITE2 12350 953.86
5002 SITE2 12349 587.78
purchase_req表:
pay_num siteid status sent_date
12345 SITE1 CANCEL 2015-11-02 15:00
12346 SITE1 SENT 2015-11-03 13:00
12347 SITE1 SENT 2015-11-04 12:00
12348 SITE2 APPROVED 2015-11-04 15:00
12349 SITE2 CANCEL 2015-11-05 11:00
12350 SITE2 SENT 2015-11-06 15:00
因此,對於所示的例子中的數據,我需要得到下面的結果:
workorderid wonum siteid pay_value
1000 5000 SITE1 852.25
1001 5001 SITE1 NULL
1002 5002 SITE1 52.32
1003 5003 SITE1 452.12
1004 5000 SITE2 154.12
1005 5001 SITE2 953.86
1006 5002 SITE2 NULL
1007 5004 SITE1 NULL
因此,例如workorderid 1001顯示pay_value爲NULL,因爲最近的付款狀態爲'取消'。 也例如workorderid 1007顯示pay_value爲NULL以及沒有付款。 下面的嘗試只顯示付款的工單。如果我調整where子句,以便 pr.status不在('CANCEL') 它表示 (pr.status不在('CANCEL')或pr.status爲空) 然後這顯示所有工作訂單每個付款都處於「取消」狀態的帳戶除外。我需要它來顯示每一個工單:S。 任何幫助將不勝感激。 SQL低於:
;with
Pay_Per_WO
AS
(
select w.workorderid, w.wonum, p.wonumref, w.siteid as wsiteid, p.siteid as psiteid, p.pay_numref, p.pay_value, w.siteid, pr.sent_date, pr.status, pr.siteid as prsiteid, pr.pay_num
,ROW_NUMBER() OVER(PARTITION BY w.workorderid order by MAX(pr.sent_date) Desc) payorder
from workorder w
left join payment_wos p
on w.wonum = p.wonumref and w.siteid = p.siteid
left join pr
on p.pay_numref = pr.pay_num and p.siteid = pr.siteid
where
pr.status not in ('CANCEL')
group by w.workorderid, w.wonum, p.wonumref, w.siteid, p.siteid, p.pay_numref, p.pay_value, w.siteid, pr.sent_date, pr.status, pr.siteid, pr.pay_num
)
,
Pay_Calc
AS
(
Select
a.workorderid, a.wonum, a.siteid, a.pay_value
from Pay_Per_WO a
WHERE a.payorder = 1
group by a.workorderid, a.wonum, a.siteid, a.pay_value
)
select * from Pay_Calc
請標記與您正在使用的數據庫你的問題。 –