表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.
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.
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.
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
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
group by cname
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
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 行)*/