有两张表:
tableA (id,typeA,typeB,scode)
-----------------------------
         1  服装    上衣   A01
         2  服装    裤子   A02
         3  家电  手电筒   T17
         4  食品    三鹿   S01tableB (starttime,scode)
------------------------
        9-13      A01 
        9-13      A01
        9-13      A02
        9-13      T17
        9-13      A02
        9-13      A01
        9-13      A01
        9-13      A02
        9-13      A01
        9-13      T17
        9-13      T17然后查询的结果是
typeA     typeB      scode       count
---------------------------------------
服装         上衣         A01          5
服装         裤子         A02          3
家电       手电筒         T17          3
食品         三鹿         S01          0

解决方案 »

  1.   

    select a.typeA,a.TypeB,a.scode,count(b.scode) as [count]
    from tablea a left join tableB b
    on a.scode=b.scode
    group by a.typeA,a.TypeB,a.scode
      

  2.   

    顺便问一下,当scode(varchar)长度不固定的时候,会出现A01,B002,C506987的时候,用rtrim(a.scode)=rtrim(b.scode)比较快,还是rtrim(a.scode) like rtrim(b.scode) 比较快
      

  3.   

    select a.typeA,a.typeB,a.scode,b.[count] from tableA a inner join (select count(scode)[Count] from tableB group by scode) b on a.Socde=b.Scode
      

  4.   

    也许楼主要select a.typeA,a.TypeB,a.scode,count(b.scode) as [count]
    from tablea a left join tableB b
    on a.scode=b.scode and b.starttime='9-13'
    group by a.typeA,a.TypeB,a.scode
      

  5.   

    select typeA,typeB,scode,count(1) [count]
    from tableA left join tableB
    on tableA.scode=tableB.scode
    group by typeA,typeB,A.scode
      

  6.   

    select a.typeA,a.typeB,a.scode,b.count(*) [count] from tableA a left join tableB b on a.scode=b.scode
      

  7.   

    用rtrim(a.scode)=rtrim(b.scode)比较快
      

  8.   


    都慢,不能直接a.scode)=b.scode吗?
      

  9.   

    select typeA,typeB,a.scode , isnull(m.cnt ,0) [count] from a
    left join
    (select scode , count(*) cnt from B group by scode) m
    on a.scode = m.scode
      

  10.   

    都慢.
    相对来说:rtrim(a.scode)=rtrim(b.scode)快点.其实直接比较就行了.
      

  11.   

    上面我错了就不改了
    左边空格会影响比较结果,右边你用varchar就不用去空格了
      

  12.   

    更正:
    declare @tableA table  (id int ,typeA varchar(10),typeB varchar(10),scode varchar(10)) 
    ----------------------------- 
    insert @tableA select  1,  '服装'  ,  '上衣' , 'A01' 
    insert @tableA select          2,  '服装'  ,  '裤子',  'A02' 
    insert @tableA select          3,  '家电' , '手电筒',  'T17' 
    insert @tableA select          4,  '食品' ,  ' 三鹿' , 'S01' 
    declare @tableB table  (starttime varchar(10),scode varchar(10)) 
    ------------------------ 
    insert @tableB select          '9-13' ,     'A01' 
    insert @tableB select          '9-13' ,     'A01' 
    insert @tableB select          '9-13' ,     'A02' 
    insert @tableB select          '9-13' ,     'T17'
    insert @tableB select          '9-13' ,     'A02'
    insert @tableB select          '9-13' ,     'A01' 
    insert @tableB select          '9-13' ,     'A01' 
    insert @tableB select          '9-13' ,     'A02' 
    insert @tableB select          '9-13' ,     'A01' 
    insert @tableB select          '9-13' ,     'T17' 
    insert @tableB select          '9-13' ,     'T17' 
    select a.typeA,a.typeB,a.scode  ,isnull(b.[count],0) from @tableA  a left join (select scode, count(scode)[Count] from @tableB group by scode) b on a.scode=b.scode
    typeA      typeB      scode                  
    ---------- ---------- ---------- ----------- 
    服?         上衣         A01        5
    服?         ?子         A02        3
    家?         手?筒        T17        3
    食品          三鹿        S01        0(4 row(s) affected)
      

  13.   

    select typeA,typeB,A.scode,[count]=count(*)
    from tableA A,tableB B
    where A.scode=B.scode
    group by typeA,typeB,A.scode