Sql 使用第一次查询的特定结果进行查询以获取附加数据

Sql 使用第一次查询的特定结果进行查询以获取附加数据,sql,db2,Sql,Db2,我一直在尝试下面的查询,目标是从A中获得结果,然后使用A中的特定信息(客户编号和零件)拉入前几年基于零件的信息 我一直在尝试不同的变化,但无法让这个工作 想法 Select * from Table A where CODE = 'YYY' and Year (END_DATE)> '2015' OR Part like 'Z%' AND plan like '5%' and Year (END_DATE)> '2015' )AS A WHERE (EXISTS

我一直在尝试下面的查询,目标是从A中获得结果,然后使用A中的特定信息(客户编号和零件)拉入前几年基于零件的信息

我一直在尝试不同的变化,但无法让这个工作

想法

Select * from Table A
where CODE = 'YYY' and Year (END_DATE)> '2015' OR 
Part like 'Z%' AND plan like '5%' and Year (END_DATE)> '2015'
)AS A

WHERE (EXISTS
        (SELECT * from ( Select * from Table B) as B

WHERE B.Part = A.PArt
            AND B.CUST_NUM = A.CUST_NUM
            AND YEAR(B.Start_date) = YEAR(A.Start_Date) - 1 )

你可以像下面这样做

Select * from Table A
where ( CODE = 'YYY' and Year (END_DATE)> '2015' ) OR 
(Part like 'Z%' AND plan like '5%' and Year (END_DATE)> '2015')
WHERE EXISTS
        (SELECT * from table  B WHERE B.Part = A.PArt
            AND B.CUST_NUM = A.CUST_NUM
            AND YEAR(B.Start_date)=YEAR(A.Start_Date) - 1 )

如果存在,或者两者都存在,请将条件放在妄想中

DB2是否支持
WITH
(又称cte)?我相信是的,您的想法是什么?为什么要使查询如此复杂?我想是的,但我不确定如何简化这是当前的问题。边走边学
--You can simplify your query like it :
-- 1) year function return always number then dont compare with char
-- 2) END_DATE>2015 are into 2 parts of your OR condition then you can factor it
-- 3) for better lisibility you can compare key in same line like it (X1, Y1)=(X2, Y2)

Select * from Table A
where END_DATE>2015 and (CODE = 'YYY' OR Part like 'Z%' AND plan like '5%')
AND EXISTS 
(
  SELECT * from table B
  WHERE
  (A.CUST_NUM, A.PArt, YEAR(A.Start_Date) - 1)=(B.CUST_NUM, B.Part, YEAR(B.Start_date)) 
)


--Other solution with join simple
Select distinct A.* from Table A
inner join Table B on (A.CUST_NUM, A.PArt, YEAR(A.Start_Date) - 1)=(B.CUST_NUM, B.Part, YEAR(B.Start_date)) 
where 
A.END_DATE>2015 and (A.CODE = 'YYY' OR A.Part like 'Z%' AND A.plan like '5%')