大家来看看这道题怎么做?

So_Long 2006-05-09 07:18:42
表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.
...全文
117 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
aniude 2006-05-10
  • 打赏
  • 举报
回复
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 行)

*/
aniude 2006-05-10
  • 打赏
  • 举报
回复

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
liangpei2008 2006-05-09
  • 打赏
  • 举报
回复
刚出去了一下,答案就这么多了!
同意楼上!
  • 打赏
  • 举报
回复
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
hyrongg 2006-05-09
  • 打赏
  • 举报
回复
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 cname

drop table tbl
---------------------
李四 1500 1200
王五 2000 2100
张三 2100 1100
十一月猪 2006-05-09
  • 打赏
  • 举报
回复

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, '王五', 87654321

select 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
So_Long 2006-05-09
  • 打赏
  • 举报
回复
是的,我写错了

表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.
liangpei2008 2006-05-09
  • 打赏
  • 举报
回复
表A中最后一条ID应该是7吧
So_Long 2006-05-09
  • 打赏
  • 举报
回复
用一条SQL语句删除A表中名字相同的记录,只保留ID最小的一条记录

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧