2014-03-28 58 views
0

我必须按如下方式在SQL中进行处理。每个订单由许多详细信息行组成。我只需要看一张表TRA99。需要在1 SQL中执行此操作

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。

+0

显示你的努力? – Divya

+2

您需要1个SQL,我们需要一些努力的证明。这是交易。 –

+0

本质上你需要tran代码中有'QEE'或'QNE'和'@ 23'的所有行。只需在查询中添加条件。 – Rahul

回答

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 
0

你需要做的是用GROUP BYEXISTS子查询可以检查你的旗帜

的存在
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

注意:您没有列出您所使用的数据库管理系统,所以我写了这个针对Microsoft SQL Server语法,但您可以翻译这个概念到你需要的任何DBMS。

+0

db2 ibm我,但我可以更改它的水晶报告 – Adams