select count(distinct consumerno),
sum (case when ccon like '%D%' then 1 else 0 end) as Domestic,
sum (case when ccon like '%B%' then 1 else 0 end) as Business
from consumer left join contract on consumerno = cconsumer
where status = 'Active'输出
total B D
35952 35694 1669有两个表:消费者和合同
我在这里试图达到的目标是获得购买产品的消费者总数,这些消费者是从商业或国内开始的。合同表有重复的消费者数字,因为他们从商业转向国内或反面。从上面可以看出,查询总数是正确的,但是对于国内和企业来说,和是错误的。任何更好的方法来实现这一点。
如有任何意见,将不胜感激。
发布于 2011-01-27 23:36:50
我假设字段“状态”在“合同”表中。最简单的方法是创建3个单独的查询,您可以确定每个查询总数的正确编号,并避免不必要的联接。
SELECT COUNT(DISTINCT consumerno) as TOTAL FROM consumer LEFT JOIN contract ON consumerno = cconsumer WHERE status='Active';
SELECT COUNT (DISTINCT cconsumer) as B FROM contract WHERE ccon LIKE '%B%' AND status='Active';
SELECT COUNT (DISTINCT cconsumer) as D FROM contract WHERE ccon LIKE '%D%' AND status='Active';如果有必要,您可以在占位符字段上黑出一个联接,将它们放在一个整齐的行中。
https://serverfault.com/questions/227851
复制相似问题