为什么不执行?
select a.行业 ,b.户数 from 行业顺序 a left join (select YGZ_MC , count(YGZ_MC) as 户数 from temp一般人 where datediff(day, GZZSYXQ ,'2013-8-1') >=0 and datediff(day, HZDJRQ ,'2013-8-1') >0
group by YGZ_MC ) b on a.行业= b.YGZ_MC
行业顺序里面存储 A B C D
如果 where datediff(day, GZZSYXQ ,'2013-8-1') >=0 光有一个条件的话,正常应该输出为
A 10
B 11
C 100
D 6
但是现在 where datediff(day, GZZSYXQ ,'2013-8-1') >=0 and datediff(day, HZDJRQ ,'2013-8-1') >0 跟着两个条件 执行起来 跟行业顺序表就无关 程序结果就变为:
C 10
B 12
A 12
D 12
请问怎么回事
------解决方案--------------------最后加个"order by a.行业"子句即可.
select a.行业,
b.户数
from 行业顺序 a
left join
(select YGZ_MC,
count(YGZ_MC) as 户数
from temp一般人
where datediff(day,GZZSYXQ ,'2013-8-1')>=0 and datediff(day,HZDJRQ,'2013-8-1')>0
group by YGZ_MC) b on a.行业=b.YGZ_MC
order by a.行业
------解决方案--------------------1、第2个语句和第一个语句是不同的,第2个语句多了一个条件,查询出来的数字也不同
and datediff(day, HZDJRQ ,'2013-8-1') >0
2、如果你想让返回的结果按照a、b、c、d排序,那么就现加一个order by a.行业 试试,这第2个语句之所以和第1个语句,返回的行业顺序不同,是由于生产了不同的执行计划,导致的:
select a.行业 ,b.户数 from 行业顺序 a left join (select YGZ_MC , count(YGZ_MC) as 户数 from temp一般人 where datediff(day, GZZSYXQ ,'2013-8-1') >=0 and datediff(day, HZDJRQ ,'2013-8-1') >0
group by YGZ_MC ) b on a.行业= b.YGZ_MC
order by a.行业