A表:ID      名称   价格   
1         aa      3
2         bb      5
3         cc      7
4         ee      6
B表:
ID        名称   价格   
3          cc      7 
2          bb      5     
1          aa      3
4          ee      6
1          aa      3
2          bb      5
3          cc      7
3          cc      7目的:从A表取出所有的记录,并从B表统计出和A表记录相同的记录次数统计,查询显示成新的数据,如:
ID       名称   价格   统计
1         aa    3       2
2         bb    5       2
3         cc    7       3
4         ee    6       1这个SQL怎么写?

解决方案 »

  1.   

    select ID ,名称 ,价格,count(*)as 统计
    from 
    (select * from ta
    union all
    select * from tb) a
    group by ID ,名称 ,价格
      

  2.   

    select b.*,count(*) as 统计
     from b group by id,名称,价格
      

  3.   

    select a.*,
           b.统计
    from ta a left join
    (select ID,
            名称,
            count(*)统计
     from tb group by  ID,名称)b
    on a.ID=b.ID and a.名称=b.名称
      

  4.   

    if not object_id('ta') is null
    drop table ta
    Go
    Create table ta([ID] int,[名称] nvarchar(2),[价格] int)
    Insert ta
    select 1,N'aa',3 union all
    select 2,N'bb',5 union all
    select 3,N'cc',7 union all
    select 4,N'ee',6
    Go
    if not object_id('tb') is null
    drop table tb
    Go
    Create table tb([ID] int,[名称] nvarchar(2),[价格] int)
    Insert tb
    select 3,N'cc',7 union all
    select 2,N'bb',5 union all
    select 1,N'aa',3 union all
    select 4,N'ee',6 union all
    select 1,N'aa',3 union all
    select 2,N'bb',5 union all
    select 3,N'cc',7 union all
    select 3,N'cc',7
    Go
    select a.*,
           b.统计
    from ta a left join
    (select ID,
            名称,
            count(*)统计
     from tb group by  ID,名称)b
    on a.ID=b.ID and a.名称=b.名称
    /*
    ID          名称   价格          统计
    ----------- ---- ----------- -----------
    1           aa   3           2
    2           bb   5           2
    3           cc   7           3
    4           ee   6           1(4 個資料列受到影響)
    */
      

  5.   

    select a.*,
           count(b.ID)统计
    from ta a left join tb b
    on a.ID=b.ID and a.名称=b.名称
    group by a.ID,a.[价格],a.名称
      

  6.   

    错了
    select a.*,b.统计from ta a 
    left join
    (select ID, 名称, count(*)统计 from tb group by  ID,名称) b
    on a.ID=b.ID and a.名称=b.名称
      

  7.   

    select a.*,统计=count(b.id)
    from a left join b 
    on a.id=b.id and a.名称=b.名称 and a.价格=b.价格
    group by a.ID,a.价格,a.名称
    /*
    ID          名称   价格          统计
    ----------- ---- ----------- -----------
    1           aa   3           2
    2           bb   5           2
    3           cc   7           3
    4           ee   6           1
    */
      

  8.   


    这种方法统计的有少了,假设A表中有一条记录,在B表中是没有的,那么统计不到A这条记录。
      

  9.   

    假设A表A表:ID 名称 价格 
    1   aa 3
    2   bb 5
    3   cc 7
    4   ee 6
    5   dd 8而B表没有第5条记录dd这个,那么,想统计出是类似这样的,ID  名称 价格 统计
    1    aa 3    2
    2    bb 5    2
    3    cc 7    3
    4    ee 6    1
    5    dd 8    0
      

  10.   

    我来补充两句if not object_id('ta') is null
        drop table ta
    Go
    Create table ta([ID] int,[名称] nvarchar(2),[价格] int)
    Insert ta
    select 1,N'aa',3 union all
    select 2,N'bb',5 union all
    select 3,N'cc',7 union all
    select 4,N'ee',6 union all
    select 5,N'ff',9
    Go
    if not object_id('tb') is null
        drop table tb
    Go
    Create table tb([ID] int,[名称] nvarchar(2),[价格] int)
    Insert tb
    select 3,N'cc',7 union all
    select 2,N'bb',5 union all
    select 1,N'aa',3 union all
    select 4,N'ee',6 union all
    select 1,N'aa',3 union all
    select 2,N'bb',5 union all
    select 3,N'cc',7 union all
    select 3,N'cc',7
    Go
    select a.id,a.名称,a.价格,count(b.id) as 统计
     from ta a left join tb b on a.id=b.id
     group by a.id,a.名称,a.价格
    id          名称   价格          统计          
    ----------- ---- ----------- ----------- 
    1           aa   3           2
    2           bb   5           2
    3           cc   7           3
    4           ee   6           1
    5           ff   9           0(所影响的行数为 5 行)