一个按季度统计的sql,没头绪!望高手帮忙

casper_moonzhang 2009-03-23 04:40:24
表结构大致是这样的

date(日期 yyyy-MM-dd) value(值 数字)

现要求按季度来统计value的和,但分两种情况:
一、如果是一个完整年(包含12个月,365/366天的数据)则生成如下表格 第一季度 第二季度 第三季度 全年
sum(value) sum(value) sum(value) sum(value)
二、如果不是一个完整年(比如统计到5月份) 则声称如下表格 第一季度 4月份 5月份 止本年累计
sum(value) sum(value) sum(value) sum(1-5月value)

不知道哪位高手帮帮忙!
谢谢!
...全文
722 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxhouyi010101 2011-05-31
  • 打赏
  • 举报
回复
二楼的解答很正确
jinjazz 2009-03-25
  • 打赏
  • 举报
回复
》》如果不是一个完整年(比如统计到5月份) 则声称如下表格

你觉得这一年和其他年可以放在一个表格里面出来吗?
anwsp 2009-03-25
  • 打赏
  • 举报
回复
mark
jlj84237485 2009-03-25
  • 打赏
  • 举报
回复
帮顶一下
netcellsoft 2009-03-25
  • 打赏
  • 举报
回复
学习
风吟卿心 2009-03-25
  • 打赏
  • 举报
回复
同意二楼的说法
ai_li7758521 2009-03-24
  • 打赏
  • 举报
回复
学习
lovezx1028 2009-03-24
  • 打赏
  • 举报
回复
顶一下。。
flairsky 2009-03-24
  • 打赏
  • 举报
回复
select datepart(year,date) [年],
sum(case datepart(quarter,date) when 1 then value else 0 end ) [第一季度],
sum(case datepart(quarter,date) when 2 then value else 0 end ) [第二季度],
sum(case datepart(quarter,date) when 3 then value else 0 end ) [第三季度],
sum(case datepart(quarter,date) when 4 then value else 0 end ) [第四季度],
sum(value) 全年
group by datepart(year,date)
dawugui 2009-03-23
  • 打赏
  • 举报
回复
那就自己些个判断语句判断当前月份.然后生成SQL语句.

declare @sql as varchar(2000)

if datepart(quarter,date) = 4
set @sql = '.....'
if datepart(quarter,date) = 3
set @sql = '.....'
if datepart(quarter,date) = 2
set @sql = '.....'
if datepart(quarter,date) = 1
set @sql = '.....'

exec(@sql)
casper_moonzhang 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dawugui 的回复:]
引用 dawugu的帖子:

你这种显示格式好麻烦,如果到了第三季度,怎么显示?
一、如果是一个完整年(包含12个月,365/366天的数据)则生成如下表格 第一季度 第二季度 第三季度 全年
sum(value) sum(value) sum(value) sum(value)
二、如果不是一个完整年(比如统计到8月份) 则声称如下表格 第一季度 第二极度 7月份 8月份 止本年累计
sum(value) sum(value) sum(value) sum(value) sum(1-8月value)
上下列数不统一,很麻烦的.
[/Quote]

恩,是这样的。不过这是两张表,不在一个table里的。根据条件不同
casper_moonzhang 2009-03-23
  • 打赏
  • 举报
回复
3Q,谢谢楼上的,现在迫切关心第二种情况的。
dawugui 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 casper_moonzhang 的帖子:]
表结构大致是这样的

date(日期 yyyy-MM-dd) value(值 数字)

现要求按季度来统计value的和,但分两种情况:
一、如果是一个完整年(包含12个月,365/366天的数据)则生成如下表格 第一季度 第二季度 第三季度 全年
sum(value) sum(value) sum(value) sum(value)
二、如果不是一个完整年(比如统计到5月份) 则声称如下表格 第一季度 4月份 5月份 止本年累计
sum(value) sum(value) sum(value) sum(1-5月value)

不知道哪位高手帮帮忙!
谢谢![/Quote]
你这种显示格式好麻烦,如果到了第三季度,怎么显示?
一、如果是一个完整年(包含12个月,365/366天的数据)则生成如下表格 第一季度 第二季度 第三季度 全年
sum(value) sum(value) sum(value) sum(value)
二、如果不是一个完整年(比如统计到8月份) 则声称如下表格 第一季度 第二极度 7月份 8月份 止本年累计
sum(value) sum(value) sum(value) sum(value) sum(1-8月value)
上下列数不统一,很麻烦的.

claro 2009-03-23
  • 打赏
  • 举报
回复
帮顶。
dawugui 2009-03-23
  • 打赏
  • 举报
回复
create table tb(date datetime,  value int)
insert into tb values(getdate() - 365 , 0)
insert into tb values(getdate() - 365 , 1)
insert into tb values(getdate() - 365 , 2)
insert into tb values(getdate() - 365 , 3)
insert into tb values(getdate() - 365 , 4)
insert into tb values(getdate() - 265 , 1)
insert into tb values(getdate() - 165 , 2)
insert into tb values(getdate() - 165 , 3)
insert into tb values(getdate() - 100 , 0)
insert into tb values(getdate() - 10 , 2)
insert into tb values(getdate() - 1 , 4)
insert into tb values(getdate() - 1 , 54)
insert into tb values(getdate() - 20 , 3)
go

select datepart(year,date) [年],
sum(case datepart(quarter,date) when 1 then value else 0 end ) [第一季度],
sum(case datepart(quarter,date) when 2 then value else 0 end ) [第二季度],
sum(case datepart(quarter,date) when 3 then value else 0 end ) [第三季度],
sum(case datepart(quarter,date) when 4 then value else 0 end ) [第四季度],
sum(value) 全年
from tb
group by datepart(year,date)

drop table tb

/*
年 第一季度 第二季度 第三季度 第四季度 全年
----------- ----------- ----------- ----------- ----------- -----------
2008 10 0 1 5 16
2009 63 0 0 0 63

(所影响的行数为 2 行)

*/
dawugui 2009-03-23
  • 打赏
  • 举报
回复
select datepart(year,date) [年],
sum(case datepart(quarter,date) when 1 then value else 0 end ) [第一季度],
sum(case datepart(quarter,date) when 2 then value else 0 end ) [第二季度],
sum(case datepart(quarter,date) when 3 then value else 0 end ) [第三季度],
sum(case datepart(quarter,date) when 4 then value else 0 end ) [第四季度],
sum(value) 全年
group by datepart(year,date)

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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