本帖最后由 bobby200x 于 2011-04-16 08:21:10 编辑

解决方案 »

  1.   

    try
    select a.药店名称,count(1)
    from A a,B b
    where b.卡号 between a.卡号(起) and a.卡号(止)
    group by a.药店名称,a.卡号(起),a.卡号(止)
      

  2.   

    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用户不包含在这两个药店
      

  3.   

    是你数据的问题吧(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
    */
      

  4.   

    select a.药店名称, cnt=COUNT(b.卡号)
    from #TEMP a
    LEFT JOIN #TEMP1 b
    ON b.卡号 between a.起卡号 and a.止卡号
    group by a.药店名称
      

  5.   

    楼主,我用你的数据做了测试,sql和你写的一样,算出来的就是3和1啊。你算出来是多少?
      

  6.   

    恕本人愚钝,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
      

  7.   

    举个例子,看能不能说清楚:比如两个表,一个是员工表,记录工号和姓名,一个是工资发放记录表,记录工号,发放日期,工资工资;对于新员工,从来没有领过工资,然后你将两表通过工号关联,不加left join则没有不返回任何记录,加上left join,则返回员工表的信息,但发放日子和工资金额为null;针对你的例子,如果你的yonghu表没有任何数据,且用了left join,则A药店为2,B药店为1。