2013-11-28 1 views
0

이 쿼리는 포함 된 모든 고객에게 판매 레코드가있는 경우 이미 작동합니다. 해당 고객에 대한 주문 세부 레코드가없는 경우 해당 고객은 행 집합이 다음 쿼리에서 반환되었습니다. 어떻게 될 때 제로를 만들 수 있습니까? 감사매출이 0 인 고객을 선택하는 방법 (주문 세부 정보 테이블에 레코드가 없음)

select c1.type0 AS type, NULLIF(c.cnt,0) AS cnt from  
    (select ct.CustomerTypeName AS type0 from customer_type ct) c1  
    LEFT JOIN  
      (select '贵宾会员' As type0, count(c.CustomerCode) AS cnt  
       from customer c INNER JOIN  


       (select c.CustomerCode, sum(od.NetSales) AS Sales from customer c 
        INNER JOIN orders o ON (c.CustomerCode = o.CustomerCode)  
        INNER JOIN order_details od ON (o.OrderCode = od.OrderCode), 
        VIPLevelUpParam v, ActiveParam a  
       where a.ActiveID = v.LevelUpID 
       AND a.TableName = 'VIPLevelUpParam' 
       AND TRIM(CAST(CAST(YEAR(c.MemoryDate) AS CHAR(4)) AS VARCHAR(4))) || '-' ||  
        TRIM(CAST(CAST(MONTH(c.MemoryDate) AS CHAR(2)) AS VARCHAR(2)))  
         = '2013-11' 

        group by c.CustomerCode, v.LevelUpAmount  
        having sum(od.NetSales) >= v.LevelUpAmount) c1  
        ON c.CustomerCode = c1.CustomerCode 

    union  
    select '普通会员' AS type0, count(c.CustomerCode) AS cnt 
     from customer c INNER JOIN 
     (select c.CustomerCode, sum(od.NetSales) AS Sales from customer c 
       INNER JOIN orders o ON (c.CustomerCode = o.CustomerCode)  
       INNER JOIN order_details od ON (o.OrderCode = od.OrderCode), 
       VIPLevelUpParam v, ActiveParam a  
       where a.ActiveID = v.LevelUpID 
        AND a.TableName = 'VIPLevelUpParam' 
        AND TRIM(CAST(CAST(YEAR(c.MemoryDate) AS CHAR(4)) AS VARCHAR(4))) || '-' ||  
         TRIM(CAST(CAST(MONTH(c.MemoryDate) AS CHAR(2)) AS VARCHAR(2)))  
         = '2013-11' 
        group by c.CustomerCode, v.LevelUpAmount  
        having sum(od.NetSales) < v.LevelUpAmount) c2  
        ON c.CustomerCode = c2.CustomerCode 
     ) c  
    ON c.type0 = c1.type0  
    group by c1.type0, c.cnt; 

답변

0

당신이 LEFT 코드의 조각에서

가입하세요 사용하는 단지 필요가 있다고 보인다

select c.CustomerCode, sum(od.NetSales) AS Sales from customer c 
INNER JOIN orders o ON (c.CustomerCode = o.CustomerCode)  
INNER JOIN order_details od ON (o.OrderCode = od.OrderCode) 

에 한번 사용 :

select c.CustomerCode, sum(od.NetSales) AS Sales from customer c 
LEFT JOIN orders o ON (c.CustomerCode = o.CustomerCode)  
INNER JOIN order_details od ON (o.OrderCode = od.OrderCode) 
+0

날 것을 해보자 감사합니다 – user3024062

+0

선택 c.CustomerCode, NULLIF (합계 (NULLIF (od.NetSales, 0)), 0) 고객 C의 매출 LEFT JOIN 주문을 ON으로 설정하십시오. (c.CustomerCode = o.CustomerCode) LEFT JOIN order_details od (o.OrderCode = od.OrderCode) by c.CUSTOMERCODE NULLIF에서 0을 가져올 수 없습니다. – user3024062

+0

에서 설명하십시오. 당신이 얻고 자하는 것을 더 질문하십시오. –

관련 문제