是你数据的问题吧(a药店本来有2个段,你要的不是2个段数据的和吗?):a药店 100 200,a药店 400 500,b药店 800 1000. CREATE TABLE #temp ( 药店名称 VARCHAR(10), 起卡号 INT, 止卡号 INT ) INSERT #temp SELECT 'a', 100, 200 UNION ALL SELECT 'a', 400, 500 UNION ALL SELECT 'b', 800, 1000 CREATE TABLE #temp1 ( 卡号 INT, [name] VARCHAR(10) ) INSERT #temp1 SELECT 101, 'name1' UNION ALL SELECT 103, 'name2' UNION ALL SELECT 566, 'name3' UNION ALL SELECT 888, 'name4' UNION ALL SELECT 101, 'name1' UNION ALL SELECT 444, 'name5' UNION ALL SELECT 555, 'name6' GO --SQL: select a.药店名称, cnt=COUNT(1) from #TEMP a LEFT JOIN #TEMP1 b ON b.卡号 between a.起卡号 and a.止卡号 group by a.药店名称 /* 药店名称 cnt ---------- ----------- a 4 b 1 */
select a.药店名称, cnt=COUNT(b.卡号) from #TEMP a LEFT JOIN #TEMP1 b ON b.卡号 between a.起卡号 and a.止卡号 group by a.药店名称
楼主,我用你的数据做了测试,sql和你写的一样,算出来的就是3和1啊。你算出来是多少?
恕本人愚钝,6、7楼的哥们给的语句我用测试数据测试了没有问题,但用到实际里还是有问题,另外哪位高人能给我讲讲下面两段有什么区别啊,我一直不太明白left join之类的用法,这两段查出来的东西不一样,就用上面的测试数据select a.YaoDianMC,cnt=count(1) from yaodian a left join yonghu b on b.KaHao between a.KaHaoD1 and a.KaHaoD2 group by a.YaoDianMC------------------------------------------------------select a.YaoDianMC,cnt=count(1) from yaodian a,yonghu b where b.KaHao between a.KaHaoD1 and a.KaHaoD2 group by a.YaoDianMC
select a.药店名称,count(1)
from A a,B b
where b.卡号 between a.卡号(起) and a.卡号(止)
group by a.药店名称,a.卡号(起),a.卡号(止)
a药店 100 200
a药店 400 500
b药店 800 1000B表的:
a用户 125
b用户 168
c用户 219
d用户 411
e用户 752
f用户 810想要的统计结果应该是
a药店 3
b药店 1a药店为a、b、d用户,分别包含在100-200和400-500
b药店为f用户包含在800-1000中
c、e用户不包含在这两个药店
CREATE TABLE #temp
(
药店名称 VARCHAR(10),
起卡号 INT,
止卡号 INT
)
INSERT #temp
SELECT 'a', 100, 200 UNION ALL
SELECT 'a', 400, 500 UNION ALL
SELECT 'b', 800, 1000
CREATE TABLE #temp1
(
卡号 INT,
[name] VARCHAR(10)
)
INSERT #temp1
SELECT 101, 'name1' UNION ALL
SELECT 103, 'name2' UNION ALL
SELECT 566, 'name3' UNION ALL
SELECT 888, 'name4' UNION ALL
SELECT 101, 'name1' UNION ALL
SELECT 444, 'name5' UNION ALL
SELECT 555, 'name6'
GO
--SQL:
select a.药店名称, cnt=COUNT(1)
from #TEMP a
LEFT JOIN #TEMP1 b
ON b.卡号 between a.起卡号 and a.止卡号
group by a.药店名称
/*
药店名称 cnt
---------- -----------
a 4
b 1
*/
from #TEMP a
LEFT JOIN #TEMP1 b
ON b.卡号 between a.起卡号 and a.止卡号
group by a.药店名称
from yaodian a
left join yonghu b
on b.KaHao between a.KaHaoD1 and a.KaHaoD2
group by a.YaoDianMC------------------------------------------------------select a.YaoDianMC,cnt=count(1)
from yaodian a,yonghu b
where b.KaHao between a.KaHaoD1 and a.KaHaoD2
group by a.YaoDianMC