需要在1 SQL中执行此操作

时间:2014-03-28 16:58:15

标签: sql

我必须按如下方式在sql中处理。每个订单都由许多细节行组成。我只需要看一张桌子,TRA99。

Order number   TRAN CODE

123              QEE
123              @23
123              ABC

 SELECT                                    
  ALL       OTRIDC, OTCOM#, OTORD#, OTFL50, OTTRND, OTTRT, OTENT#,    
OTSFX#,                                                               
            OTREL#, OTUSRN, OTTRNC, OTTRN$, OTFL01                    
  FROM      ASTDTA.OETRANOT T01                                       
  WHERE     OTTRNC IN ('QEE', 'QNE')  

我想要所有有#' QEE'或者' QNE'。这些是QUote代码。我们想要一份能够告诉我们的报告,它会引用订单'转换为真正的订单而没有。

然后如果他们也有@ 23,这告诉我订单已转换或成为实际订单。我不知道如何在1 sql查询中执行此操作我正在考虑为所有QEE和QNE代码创建视图。然后针对寻找@ 23的那个运行第二个查询。

2 个答案:

答案 0 :(得分:0)

基于我认为你想要做的事情。这将为您提供与QEE或QNE和@ 23

相关的所有订单号
    SELECT T1.OrderNumber 
    FROM TRA99 T1
    WHERE T1.OrderNumber in (
                 SELECT OrderNumber
                 FROM TRA99
                 WHERE TCode IN ('QEE','QNE')
                 ) 
    AND T1.TCode='@23'
GROUP BY T1.OrderNumber 

答案 1 :(得分:0)

您需要做的是使用GROUP BY EXISTS子查询可以检查您的国旗是否存在

select t1.[Order Number]
      ,(CASE WHEN EXISTS(select * 
                         from TRA99 as t2
                         where t1.[Order Number] = t2.[Order Number]
                           and t2.[Tran Code] = '@23')
        THEN
          cast(1 as bit)
        ELSE
          cast(0 as bit)
        END) as HasFlag
from TRA99 as t1
where t1.[Tran Code] in ('QFE', 'QNE')
group by t1.[Order Number]

Working example

注意:您没有列出您正在使用的DBMS,因此我根据Microsoft Sql Server语法编写了这个,但您可以将此概念转换为您需要的任何DBMS。