2016-06-01 3 views
1

여러 파일을 실행하는 간단한 쿼리가 있으며 결과를 결합하기 위해 UNION을 사용합니다. 내 WHERE 절은 변경해야하는 날짜를 나타냅니다. 내 select 문에서 모든 위치에서이를 변경하는 대신 각 파일의 날짜 매개 변수를 한 번에 변경할 수있는 방법이 있는지 궁금합니다. 아래 예제에서 두 위치 모두에서 수동 업데이트를 수행하지 않고 두 위치에서 CYYMMDD를 변경하고 싶습니다.한 번에 여러 장소 변경

SELECT 

POATYP, 
POACO#, 
PHVND, 
POAOR#, 
POACOD, 
POAAMT + POARC$ AS COLUMN0000 

FROM 

CORP01.DSFILES95.DSPOACA DSPOACA, 
CORP01.DSFILES95.DSPOHDR DSPOHDR 

WHERE 

DSPOACA.POACO# = DSPOHDR.PHCO# 
AND DSPOACA.POAOR# = DSPOHDR.PHPO# 
AND (POATYP = A 
AND PHPOD >= CYYMMDD) 

UNION SELECT 

POATYP, 
POACO#, 
PHVND, 
POAOR#, 
POACOD, 
POAAMT + POARC$ AS COLUMN0000 

FROM 

CORP01.DSFILES17.DSPOACA DSPOACA, 
CORP01.DSFILES17.DSPOHDR DSPOHDR 

WHERE 

DSPOACA.POACO# = DSPOHDR.PHCO# 
AND DSPOACA.POAOR# = DSPOHDR.PHPO# 
AND (POATYP = A 
AND PHPOD >= CYYMMDD) 
+3

사용중인 데이터베이스에 질문에 태그를 지정해야합니다. –

+0

왜 이것을 저장 프로 시저로 만들고 날짜를 매개 변수로 전달하는 것이 좋을까요? –

+0

쿼리 편집기로 ctrl-H를 사용할 수 있습니까? –

답변

4

가끔이 목적을

with params as (
     select CYYMMDD as cyymmdd 
    ) 
select * 
from ((select . . . 
     from params cross join 
      . . . 
     where . . . PHPOD >= CYYMMDD 
    ) union 
     (select . . . 
     from params cross join 
      . . . 
     where . . . 
    ) . . . 
    ) x; 

노트에 대한 열팽창 계수를 사용하면 중복을 제거하는 오버 헤드가 발생하지 않을 경우

  • 당신은 UNION ALL를 사용해야합니다.
  • 명시 적 JOIN 구문을 사용하는 방법을 배워야합니다. 간단한 규칙 : 쉼표는 FROM 절에 사용하십시오.
  • 일부 데이터베이스에서는 변수와 비슷한 작업을 수행 할 수 있지만 CTE는 대부분의 데이터베이스에서 지원됩니다.