我有一个表(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
希望有帮助。。。让我们知道。