请帮忙写一个SQL

chq_top 2004-06-10 10:09:44
Tab1(date,unit,money),字段分别为日期,单位和投资;数据举例如下:
(2004-3-2,SC,2000)
(2004-3-10,SC,1100)
(2004-1-1,CQ,1300)
(2004-4-2,SC,5200)
(2004-4-2,CQ,2500)
.......
要求如下:
按年份、月统计出每个单位的投资累积值,显示为
2004-1 CQ 1300
2004-3 SC 3100
2004-4 CQ 3800
2004-4 SC 8300

请问,该SQL怎么写?
...全文
113 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
NavyBlue 2004-06-10
  • 打赏
  • 举报
回复
学习
icedut 2004-06-10
  • 打赏
  • 举报
回复
and datediff(month,b.[date],a.dt+'-01')>=0
这个函数用得真好
icedut 2004-06-10
  • 打赏
  • 举报
回复
还是 zjcxc(邹建) 厉害
高手就是不一样
zjcxc 元老 2004-06-10
  • 打赏
  • 举报
回复
--如果要按年月排序,则加order by

select 年月=a.dt,单位=a.unit,投资累计=sum(b.[money])
from(
select dt=convert(char(7),[date],120),unit
from tab1
group by convert(char(7),[date],120),unit
)a join tab1 b on a.unit=b.unit
and datediff(month,b.[date],a.dt+'-01')>=0
group by a.dt,a.unit
order by a.dt,a.unit
zjcxc 元老 2004-06-10
  • 打赏
  • 举报
回复
--测试

--测试数据
create table Tab1([date] datetime,unit varchar(10),[money] int)
insert tab1 select '2004-3-2' ,'SC',2000
union all select '2004-3-10','SC',1100
union all select '2004-1-1' ,'CQ',1300
union all select '2004-4-2' ,'SC',5200
union all select '2004-4-2' ,'CQ',2500
go

--统计
select 年月=a.dt,单位=a.unit,投资累计=sum(b.[money])
from(
select dt=convert(char(7),[date],120),unit
from tab1
group by convert(char(7),[date],120),unit
)a join tab1 b on a.unit=b.unit
and datediff(month,b.[date],a.dt+'-01')>=0
group by a.dt,a.unit
go

--删除测试
drop table tab1

/*--测试结果

年月 单位 投资累计
------- ---------- -----------
2004-01 CQ 1300
2004-04 CQ 3800
2004-03 SC 3100
2004-04 SC 8300

(所影响的行数为 4 行)
--*/
icedut 2004-06-10
  • 打赏
  • 举报
回复
搞了半天
结果才出来一半
zjcxc 元老 2004-06-10
  • 打赏
  • 举报
回复
select 年月=a.dt,单位=a.unit,投资累计=sum(b.[money])
from(
select dt=convert(char(7),[date],120),unit
from tab1
group by convert(char(7),[date],120),unit
)a join tab1 b on a.unit=b.unit
and datediff(month,b.[date],a.dt+'-01')>=0
group by a.dt,a.unit
icedut 2004-06-10
  • 打赏
  • 举报
回复
目前还没想出来结果
还是等高手把
chq_top 2004-06-10
  • 打赏
  • 举报
回复
icedut(冰) 说的对,要求的是一个累加值,如2004年5月份,结果应该是2004年1月到5月的累积。
icedut 2004-06-10
  • 打赏
  • 举报
回复
结果还要进一步处理
icedut 2004-06-10
  • 打赏
  • 举报
回复
pengda1i(假冒大力(V0.1))
你的结果不对
2004-01 CQ 1300.0000
2004-04 CQ 2500.0000
2004-03 SC 3100.0000
2004-04 SC 5200.0000

他要的"按年份、月统计出每个单位的投资累积值,"
2004-04 CQ 3800.0000=2500+1300
bflovesnow 2004-06-10
  • 打赏
  • 举报
回复
注意:'2004-01-1' 和 '2004-1-1' 的情况。
52vc 2004-06-10
  • 打赏
  • 举报
回复
---以月份统计----
GROUP BY DATEPART(YYYY, JLR)+DATEPART(MM, JLR)
---以年份统计
---以月份统计----
GROUP BY DATEPART(YYYY, JLR)
pengda1i 2004-06-10
  • 打赏
  • 举报
回复
select convert(char(7),date,120) as date,
unit,sum([money]) as [money]
from Tab1
group by convert(char(7),date,120),unit

34,588

社区成员

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

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