如何才能获得一个位置的发票?

时间:2013-12-12 17:08:43

标签: sql

我有表(aztrd)它包含发票deatils,如itm_code,date,loc_cd ...等等

  • 在每张发票中,它们是来自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不是两个?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您的描述有点难以阅读,正如ElecticLlama指出的那样,您提供的SQL代码将无法运行...

但是,基于ElecticLlama的解释和代码清理,(如果这对你有帮助,UPVOTE HIS TOO),我认为这些逻辑变化(特别是添加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

希望有所帮助! ......让我们知道。