Sql 使用第一次查询的特定结果进行查询以获取附加数据
我一直在尝试下面的查询,目标是从A中获得结果,然后使用A中的特定信息(客户编号和零件)拉入前几年基于零件的信息 我一直在尝试不同的变化,但无法让这个工作 想法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
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%')