是否可以在此sql中使用逻辑过滤器?

时间:2014-10-02 21:28:53

标签: sql

如果可以的话。我想选择#一次的订单。 根据这些trn代码'CSS','CQU','CWA','OCS','CRF',
    'BCS','CCN','RBC','001','RQU','RRF','RWA

目前每个订单和多个trn代码可以有一行 所以我们可以拥有 订单#ottrnc 12345 001 12345 RBC 12345 CWA

是否可以只选择一个订单#?但问题是,所有订单首先获得001。然后,如果订单完成了某些事情,它就会得到其他的trn代码。在上面的例子中,我们想要RBC或CWA行。

SELECT T01.OTTRT,T01.OTCOM#, T02.OHPTTC, T02.OHSLR#, T01.OTORD#,      
T01.OTTRND, T02.OHORDT, T02.OHORDD, T02.OHTTN$, T01.OTUSRN,           
T02.OHOSTC, T01.OTTRNC FROM ASTDTA.OETRANOT T01 INNER JOIN            
asTDTA.OEORHDOH T02 ON T01.OTCOM# = T02.OHCOM# AND T01.OTORD# =       
T02.OHORD# WHERE T01.OTTRNC IN ('CSS', 'CQU', 'CWA', 'OCS', 'CRF',    
'BCS', 'CCN', 'RBC', '001', 'RQU', 'RRF', 'RWA') AND T02.OHORDD >=    
20140101 AND T02.OHOSTC <> 'CN'         

1 个答案:

答案 0 :(得分:1)

Mat Richardson指出,SELECT DISTINCT可能符合您对“一次选择订单”的期望。在不知道如何填充/填充其余列的情况下,下面的查询应该适用于大多数DBMS,并且应该为每个具有OTTRNC为001的订单返回一个订单号。并且至少还有一个其他代码中的一个列举。

   SELECT DISTINCT 
    T01.OTTRNC
    FROM ASTDTA.OETRANOT T01
    WHERE T01.OTTRNC IN ('CSS', 'CQU', 'CWA', 'OCS', 'CRF',    
    'BCS', 'CCN', 'RBC', '001', 'RQU', 'RRF', 'RWA')
    AND  
       EXISTS (
        SELECT 1
        FROM ASTDTA.OETRANOT IT01
        WHERE IT01.OTTRNC = ('001')
        AND IT01.OTORD# = T01.OTORD#
        )