表A
ID  Cname  TotalPay  SendDate
1   张三   1000      2005-1-1
2   李四   1500      2005-2-3
3   张三   1100      2005-2-1
4   李四   1200      2006-1-1
5   王五   2000      2005-6-1
6   张三   1100      2006-2-1
5   王五   2100      2006-6-1表B
ID  Cname  Tel
1   张三   81234567
2   李四   87654321
3   王五   87654321表C
ID  Cname 2005年  2006年
1   张三  2100    1100
2   李四  1500    1200
3   王五  2000    2100通过A,B表,用一条SQL语句得出表C.

解决方案 »

  1.   

    用一条SQL语句删除A表中名字相同的记录,只保留ID最小的一条记录
      

  2.   

    是的,我写错了表A
    ID  Cname  TotalPay  SendDate
    1   张三   1000      2005-1-1
    2   李四   1500      2005-2-3
    3   张三   1100      2005-2-1
    4   李四   1200      2006-1-1
    5   王五   2000      2005-6-1
    6   张三   1100      2006-2-1
    7   王五   2100      2006-6-1表B
    ID  Cname  Tel
    1   张三   81234567
    2   李四   87654321
    3   王五   87654321表C
    ID  Cname 2005年  2006年
    1   张三  2100    1100
    2   李四  1500    1200
    3   王五  2000    2100通过A,B表,用一条SQL语句得出表C.
      

  3.   


    declare @t table(id int, cname varchar(8000), totalpay int , senddate datetime)
    insert into @T
    select 1, '张三', 1000, '2005-1-1' union
    select 2, '李四', 1500, '2005-2-3' union
    select 3, '张三', 1100, '2005-2-1' union
    select 4, '李四', 1200, '2006-1-1' union
    select 5, '王五', 2000, '2005-6-1' union
    select 6, '张三', 1100, '2006-2-1' union
    select 7, '王五', 2100, '2006-6-1'declare @t1 table(id  int ,cname varchar(8000), tel int)
    insert into @T1
    select 1, '张三', 81234567 union
    select 2, '李四', 87654321 union
    select 3, '王五', 87654321select b.id ,
           b.cname,
           (select  sum(totalpay) from @t a where a.cname = b.cname and datepart(year,senddate) = '2005' ) as '2005年',
           (select  sum(totalpay) from @t a where a.cname = b.cname and datepart(year,senddate) = '2006' ) as '2006年'from   @t1 b
      

  4.   

    create table tbl(id int identity(1,1),cname nvarchar(10),totalpay int,senddate nvarchar(10))
    insert into tbl select N'张三',1000,'2005-1-1'
          union all select N'李四',1500,'2005-2-3'
          union all select N'张三',1100,'2005-2-1'
          union all select N'李四',1200,'2006-1-1'
          union all select N'王五',2000,'2005-6-1'
          union all select N'张三',1100,'2006-2-1'
          union all select N'王五',2100,'2006-6-1'
    select cname,sum(case when left(senddate,4)='2005' then totalpay end) as '2005',sum(case when left(senddate,4)='2006' then totalpay end) as '2006'  from tbl
    group by cnamedrop table tbl
    ---------------------
    李四 1500 1200
    王五 2000 2100
    张三 2100 1100
      

  5.   

    select cname,sum(case when left(senddate,4)='2005' then totalpay end) as '2005',sum(case when left(senddate,4)='2006' then totalpay end) as '2006'  from tbl
    group by cname
      

  6.   


    select B.ID,B.Cname,
           (select sum(TotalPay) from A where datepart(year,SendDate)='2005') as '2005年',
           (select sum(TotalPay) from A where datepart(year,SendDate)='2006') as '2006年'
    from B
      

  7.   

    declare @t table(id int, cname varchar(10), totalpay int , senddate datetime)
    insert into @T
    select 1, '张三', 1000, '2005-1-1' union
    select 2, '李四', 1500, '2005-2-3' union
    select 3, '张三', 1100, '2005-2-1' union
    select 4, '李四', 1200, '2006-1-1' union
    select 5, '王五', 2000, '2005-6-1' union
    select 6, '张三', 1100, '2006-2-1' union
    select 7, '王五', 2100, '2006-6-1'declare @t1 table(id  int ,cname varchar(10), tel int)
    insert into @T1
    select 1, '张三', 81234567 union
    select 2, '李四', 87654321 union
    select 3, '王五', 87654321
    select B.id,B.cname,C.Cpay05 as '2005',CPay06 as '2006' 
    from @t1 B,
       (
        select Cname,
               CPay05=sum( case when datepart(year,senddate)='2005'  then Totalpay else 0 end),
               CPay06=sum( case when datepart(year,senddate)='2006' then Totalpay else 0 end) 
        from @t group by Cname
       )C 
    where B.Cname=C.Cname order by B.id asc
    /*
    id          cname      2005        2006        
    ----------- ---------- ----------- ----------- 
    1           张三         2100        1100
    2           李四         1500        1200
    3           王五         2000        2100(所影响的行数为 3 行)*/