查找未经购买的订单

时间:2016-04-29 21:19:15

标签: sql sql-server tsql

我正在尝试创建一个SQL查询,该查询显示未经过凭证的所有采购订单的列表。在我们当前检查PO是否已被提票的系统中,AP工作人员点击进入PO并单击选项卡,其中显示的数据类似于以下数据。

这是Vouchered PO的一个例子。 AP购买行可以购买。

enter image description here

一个不受欢迎的PO会是这样的。如您所见,它缺少AP购买的行条目,将其标记为Vouchered。 enter image description here

如果我想重新创建vouchered PO的结果,我的代码将如下所示:

select 
imhstry_dte_effctve as DateEffective,
imhstry_srce_jrnl as SourceJournal,
prchseordr_id as 'PO ID',
sum(imhstry_qntty_ordrd) as QuantityOrdered,
sum(imhstry_qntty_rcvd) as QuantityReceived,
sum(imhstry_qntty_invcd_ap) as Vouchered
from imhstry
left join prchseordr on imhstry.imhstry_ordr_id = prchseordr.prchseordr_id
Where prchseordr_id = '1234' 
group by 
imhstry.imhstry_itm_dscrptn,
imhstry.imhstry_dte_effctve,
imhstry.imhstry_srce_jrnl,
prchseordr.prchseordr_id

我想要做的是创建一个查询,该查询显示我们系统中当前尚未购买的所有采购订单的简单列表,如果可能的话,还显示尚未完全兑现的所有采购订单。我有一种感觉,这是非常直接的,但我陷入困境,无法想到如何解决这个问题。非常感谢任何帮助。

如果不清楚或需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

首先,

left join prchseordr on imhstry.imhstry_ordr_id = prchseordr.prchseordr_id
Where prchseordr_id = '1234' 

实际上是inner join。你确定吗?如果需要左连接,则更改

left join prchseordr on imhstry.imhstry_ordr_id = prchseordr.prchseordr_id
Where imhstry.imhstry_ordr_id = '1234' 

从您的示例数据看起来您只需从imhstry_srce_jrnlSELECT删除GROUP BY,然后根据要求添加HAVING sum(imhstry_qntty_invcd_ap) = 0HAVING sum(imhstry_qntty_invcd_ap) < sum(imhstry_qntty_ordrd)