如何只使用一个loc获取发票

  • 本文关键字:一个 loc 获取 sql
  • 更新时间 :
  • 英文 :


我有一个表(aztrd),它包含发票数据,如itm_code、date、loc_cd。。。ect

  • 在发票中的每一张发票中,它们都是loc_cd"1"和loc_cd"2中的项目,有些发票只有loc_cd 1或loc_cd 2

我使用这个查询:

SELECT tr_no,loc_cd FROM AZTRD WHERE LOC_CD = 1 and tr_ty = 102 and loc = 01 AND LOC_CD NOT IN (SELECT itm_cd WHERE LOC_CD = 2) GROUP BY TR_NO,LOC_CD ORDER BY TR_NO

那么,我如何才能获得有LOC_CD(1)的发票-任何LOC_CD都有(1,2)我不想要它们-正如你所看到的,我尝试了一下,但这张发票有来自1的项目,也有来自2的项目-所以我不想要它,只想发票只有一个LOC_CD,而不是两者都有?

SQL根本无法工作。请公布您正在使用的实际SQL。

做了很多假设你可能会在这之后:

SELECT tr_no,loc_cd 
FROM AZTRD WHERE LOC_CD = 1 
AND  tr_ty = 102 
AND  loc = 01 
AND  itm_cd NOT IN     
    (SELECT itm_cd FROM AZTRD WHERE LOC_CD = 2) 
ORDER BY TR_NO

一种可能更快的方法是这样的:

SELECT tr_no,loc_cd 
FROM AZTRD D 
WHERE LOC_CD = 1 
and tr_ty = 102 
and loc = 01 
AND NOT EXISTS (
    SELECT 1 FROM AZTRD E WHERE E.itm_cd = D.itm_cd AND E.LOC_CD = 2) 
ORDER BY D.TR_NO

您的描述有点难以阅读,正如ElecticLama所指出的,您提供的SQL代码将不会运行。。。

但是,在ElecticLama的解释和代码清理的基础上(所以,如果这对你有帮助,请投票给他),我认为这些逻辑变化(特别是添加HAVING子句)可能会给你带来目标:"只希望发票有一个LOC_CD,而不是两者都有"。

SELECT tr_no, location_code = MIN(loc_cd)
FROM AZTRD 
WHERE tr_ty = 102 
GROUP BY tr_no
HAVING MIN(loc_cd) = MAX(loc_cd)
ORDER BY tr_no

希望有帮助。。。让我们知道。

最新更新