SQL问题 分组求和

如下数据:日期姓名金额2008-1-12sun1002008-1-12张1002008-1-13sun1002008-1-19张3002008-2-12sun120200... 如下数据:
日期 姓名 金额
2008-1-12 sun 100
2008-1-12 张 100
2008-1-13 sun 100
2008-1-19 张 300
2008-2-12 sun 120
2008-2-19 张 300
2008-3-12 sun 130
得到的查询结果:
姓名 2008-01 2008-02 2008-03
sun 200 120 130
张 400 300
请写出查询语句,提示:分组、求和 每个月每个人得到的金额
展开
 我来答
roy_88
2009-03-26 · TA获得超过3696个赞
知道大有可为答主
回答量:2914
采纳率:100%
帮助的人:2787万
展开全部
--> --> (Roy)生成测试数据

if not object_id('Tempdb..#T') is null
drop table #T
Go
Create table #T([日期] Datetime,[姓名] nvarchar(3),[金额] int)
Insert #T
select '2008-1-12',N'sun',100 union all
select '2008-1-12',N'张',100 union all
select '2008-1-13',N'sun',100 union all
select '2008-1-19',N'张',300 union all
select '2008-2-12',N'sun',120 union all
select '2008-2-19',N'张',300 union all
select '2008-3-12',N'sun',130
Go
declare @S nvarchar(4000)
set @s='select [姓名]'
Select @s=@s+','+quotename(convert(varchar(7),[日期],120))+'=sum(case when convert(varchar(7),[日期],120)='+quotename(convert(varchar(7),[日期],120),'''')+' then [金额] else 0 end)'
from #T group by convert(varchar(7),[日期],120)

exec(@s+' from #T group by [姓名]')

--或
select [姓名],
[2008-01]=sum(case when convert(varchar(7),[日期],120)='2008-01' then [金额] else 0 end),
[2008-02]=sum(case when convert(varchar(7),[日期],120)='2008-02' then [金额] else 0 end),
[2008-03]=sum(case when convert(varchar(7),[日期],120)='2008-03' then [金额] else 0 end)
from #T group by [姓名]

姓名 2008-01 2008-02 2008-03
---- ----------- ----------- -----------
sun 200 120 130
张 400 300 0

(2 行受影响)
xiegang3366999
2009-03-26 · 超过13用户采纳过TA的回答
知道答主
回答量:109
采纳率:0%
帮助的人:38.9万
展开全部
select 日期,姓名,sum (金额) from 表名
where 条件
group by 日期,姓名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式