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;
날 것을 해보자 감사합니다 – user3024062
선택 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
에서 설명하십시오. 당신이 얻고 자하는 것을 더 질문하십시오. –