2015-01-12 4 views
0

2013 년에 존재하지만 2014 년에 존재하지 않는 주문 날짜가있는 모든 구성원의 기록을 제공하는 쿼리를 작성하려고합니다. 쿼리를 통해 2014 년에 남아있는 2013 레코드를 모두 제공합니다. 2013 년에 주문 날짜가 있고 2014 년이 아닌 레코드 만 가져 오려고합니다. 따라서 2013 년에 존재하는 레코드를 표시하고 존재하지 않는 레코드는 제외해야합니다 제가 SQL을 처음 접했을 때 도움을주십시오.년에 존재하지만 다른 사람에 존재하지 않는 날짜에 대한 SQL 구문

대단히 감사합니다.

이 OMFMC.BILL_MASTER_CUSTOMER_ID, OMFMC.BILL_FIRST_NAME, OMFMC.BILL_LAST_NAME, CMI.NATIONAL_LEVEL2, MIN (OMFMC.ORDER_DATE), OMFMC.ORDER_DATE, FT를 선택

다음은 내 쿼리입니다. PAYMENT_AMOUNT,

SUM(FT.PAYMENT_AMOUNT)as SUM 

FROM 고객 CUSTOMER_IN_TRIBUTE_TO

RIGHT OUTER JOIN ORDER_FND_DETAIL OFD 
    ON (CUSTOMER_IN_TRIBUTE_TO.MASTER_CUSTOMER_ID=OFD.IN_TRIBUTE_TO_MAST_CUST 
    and CUSTOMER_IN_TRIBUTE_TO.SUB_CUSTOMER_ID=OFD.IN_TRIBUTE_TO_SUB_CUST) 


RIGHT OUTER JOIN ORDER_MBR_FND_MTG_CUS_INFO_VW OMFMC 
    ON (OMFMC.ORDER_NO=OFD.ORDER_NO 
    and OMFMC.ORDER_LINE_NO = OFD.ORDER_LINE_NO ) 


LEFT OUTER JOIN CUS_CURRENT_MEMBERSHIP_INFO CMI 
    ON (CMI.MASTER_CUSTOMER_ID=OMFMC.BILL_MASTER_CUSTOMER_ID 
    and CMI.SUB_CUSTOMER_ID=OMFMC.BILL_SUB_CUSTOMER_ID) 


LEFT OUTER JOIN FAR_TXN FT 
    ON (FT.ORDER_NO=OMFMC.ORDER_NO 
    and FT.ORDER_LINE_NO=OMFMC.ORDER_LINE_NO) 

WHERE

OMFMC.ORDER_STATUS_CODE='A' 
AND OMFMC.LINE_STATUS_CODE = 'A'   
AND OMFMC.ORDER_STATUS_CODE = 'A' 
AND OMFMC.LINE_STATUS_CODE = 'A' 
AND OMFMC.ORDER_DATE BETWEEN '1/1/2013' and '12/31/2013' 
AND OMFMC.ORDER_DATE Not BETWEEN '1/1/2014' and '12/31/2014' 
AND OMFMC.BILL_CUSTOMER_CLASS_CODE NOT IN ('TEST_MBR','STAFF') 
AND FUND in ('FOSFN' , 'MFUND') 

GROUP OMFMC.BILL_MASTER_CUSTOMER_ID, OMFMC.BILL_FIRST_NAME, OMFMC.BILL_LAST_NAME, OMFMC.BILL_LABEL_NAME, OMFMC.BILL_PRIMARY_EMAIL_ADDRESS, OMFMC.BILL_ADDRESS_1, OMFMC.BILL_ADDRESS_2 BY , OMFMC.BILL_CITY, OMFMC.BILL_STATE, OMFMC.BILL_POSTAL_CODE, CMI.NATIONA L_LEVEL2, OMFMC.ORDER_DATE, 주문 날짜 필드에 FT.PAYMENT_AMOUNT

HAVING SUM(FT.PAYMENT_AMOUNT) < 0 

Order By BILL_MASTER_CUSTOMER_ID 

는 2013 년이 날짜, 2014 년 날짜가 있습니다. 내 검색어로 2013 년 및 2014 년 주문 날짜를보고 2013 년 주문 날짜 만 빼고 싶습니다. 2013 년 및 2014 년 날짜가있는 레코드가 아닙니다. 2013 년과 2014 년에 주문이있는 경우 해당 레코드를 제외하고 싶습니다. 그래서 예를 들면 :

enter code here 

Bill_Member_ID .......... ORDER_DATE
(123) .................... 01/05/2013
123 .................... 01/27/2013
123 ................ .... 02/15/2014
123 .................... 02/18/2014
456 .......... .......... 01/07/2013
789 .................... 01/05/2013
789 .... ............... . 2014년 2월 17일
992 .................... 2013년 3월 15일

그럼 나는

의 수익을 얻어야한다

Bill_Member_ID ..........

456

.................... 2013년 1월 7일
992을 ORDER_DATE .............. ......

2013년 3월 15일 당신이 간단한 부속 선택하고, 그 결과를 표시하도록 바깥 쪽을 선택으로 그 결과를 공급할 필요가있는 무엇

답변

0

너무 감사드립니다.

뒤에 오는 것 Bill_Member_ID의 주문은 2013-01-01부터 2013-12-31까지이며 2014-01-01에서 2014 사이의 주문 날짜는 없습니다. 12-13. 자, 의사 코드를 선택해 보겠습니다. 우리는 이것을 내부에서 처리합니다 (가장 안쪽에서 시작하여 선택의 가장 바깥 쪽 레이어로 나아갑니다).

첫번째로, 2014 년 주문을 회원의 목록을 생성은 그래서

Select Bill_Member_ID 
From Order_Table 
WHERE Year(OrderDate) = '2014'; 

우리는 피드의 그 다음 선택의 조건으로. 이 다음 계층의 역할은 2013의 주문일있는 모든 회원을 선택하는 것입니다, 그러나 이것은 2013 년에 주문을 Bill_Member_ID의 목록을 얻을 수 없습니다 2014

Select Bill_Member_ID 
    From Order_Table 
    WHERE Year(OrderDate) = '2013' AND Bill_Member_ID Not In 
    (
     Select Bill_Member_ID 
     From Order_Table 
     WHERE Year(OrderDate) = '2014' 
    ) 

에 있지만 2014 년 추가 열을 추가 당신은 당신의 마지막 선택을 위해 필요합니다. 또한 필요에 따라 결과를 좁히기 위해 다른 필터링 조건 (즉, 테스트가 아닌 직원이 아닌)을 추가하십시오.

귀하가 찾는 고객 목록을 생성하기 위해 필요한 모든 것입니다. 연도를 지정하는 것을 지원하지 않는 데이터베이스를 사용하지 않는 경우 조건의 범위에서 where 날짜 필드를 필터링하려면 중간 날짜를 사용해야합니다.

+0

정말 많이 스타 파일럿! 이것은 그것을했다. :) –

+0

당신은 오신 것을 환영합니다. 너에게 도움이 된 다행. SO에서 실제 답변으로 받아 들여지는 문제를 해결하는 답변을 원합니다. – StarPilot