2015-01-12 4 views
0

몇 가지 사전 정의 된 조건을 사용하여 Trade 테이블의 날짜 필드를 GETDATE() 함수와 비교하여 이번 달의 거래를 처리합니다. 년, 전년도 등BOBJ 4.1 하나의 사전 정의 된 조건에서 두 개의 조인되지 않은 테이블의 값 사용

이제보고 기간의 시작일과 종료일을 나타내는 일련의 날짜가있는 추가 테이블을 생성해야합니다. 현재 연도보고의 시작 및 종료 날짜, 전년도보고의 시작 날짜 및 종료 날짜 등

이 추가 테이블 및 거래 테이블은 가입되지 않습니다. 사실 추가 테이블은 아무 것도 연결되어 있지 않습니다.

나는 즉, 나는 다음과 같은

Trade.Date < ReportingDates.CurrentYearEndDate 
AND 
Trade.Date > ReportingDates.CurrentYearStartDate 
처럼 보이도록 새로운 조건을 좋아하는 것, 무역 테이블에서 날짜가 새로운 날짜 테이블의 값과 비교됩니다 미리 정의 된 조건의 새로운 세트를 작성해야

조건은 잘 확인합니다,하지만 불행히도 내가 얻을 "는 호환되지 않는 개체가 포함되어 있기 때문에 쿼리를 실행할 수 없습니다. (IES 00008)를"나는 조건을 실행하려고 오류 ".

+0

'ReportingDates'에는 단일 행만 포함되어 있습니까? – Joe

+0

@Joe 예, 항상 그렇습니다 – IgorShch

답변

1

미리 정의 된 조건에 부속 선택을 사용할 수 있습니다 like :

trade.date between (select currentyearstartdate from reportingdates) 
       and (select currentyearenddate from reportingdates) 

reportingdates은 실제로 아무것도 가입되어 있지 않으므로 유니버스 구조에있을 필요가 없습니다. 이것은 하나의 단점을 가지고 있습니다 - 테이블에 실제로 그것이 필요하다는 것은 테이블 목록에서 명백하지 않습니다.

또는 tradereportingdates을 카티 션 곱으로 결합하는 파생 테이블을 만들 수 있습니다. 당신의 상태는 단순히 (파생 테이블 DT라는 가정) 것 때문에 파생 테이블은 두 테이블의 모든 열을 포함합니다 :

dt.date between dt.currentyearstartdate and dt.currentyearenddate 

방법의 단점은 reportingdates모든에 포함되어 있다는 것입니다 쿼리가 필요한지 여부에 관계없이 SQL을 읽을 수 있습니다.

+0

고마워요, Joe. 하위 쿼리에 대한 힌트는 매우 유용했습니다. 사전 정의 된 조건에서 사용할 수 있다는 것을 몰랐습니다. – IgorShch