我一直在尝试各种方式来获取我需要的格式的数据,但无济于事。我需要合并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
请标记与您正在使用的数据库你的问题。 –