求一个SQL 语句(关于统计)

pennymay 2009-01-21 10:18:00
数据库有 A B C 3个不同ITEM, 每天生产量已经知道, 求每天生产量总和

如: 每天生产量
1月1号 1月2号 1月3号 1月4号
A 5 7 8 9
B 7 7 8 8
C 6 7 8 7

现在我想要个SQL语句, 结果是这样的:
1月1号 1月2号 1月3号 1月4号
A 5 12 20 29
B 7 14 22 30
C 6 13 21 28

就是截至到当天的总生产量, 谢谢大家了
...全文
147 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihan6415151528 2009-01-21
  • 打赏
  • 举报
回复
关注一下
ACMAIN_CHM 2009-01-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 pennymay 的回复:]
是输入一个时间段, 然后在这个时间段里每一天的生产总量
比如说选择从1月7号到1月16号, 那么就显示这几天每天的总和

C 1月7号 6 (7号)
C 1月8号 13 (7号+8号)
C 1月9号 21 ...
C 1月10号 28
C 1月11号 35
C 1月12号 48
C 1月13号 57
C 1月14号 63
C 1月15号 70
C 1月16号 78
C 1月17号 88
[/Quote]

select a.名称,a.日期,sum(b.生产量)
from yourTable a inner join yourTable b on a.名称=b.名称 and a.日期>=b.日期
group by a.名称,a.日期
pennymay 2009-01-21
  • 打赏
  • 举报
回复
是输入一个时间段, 然后在这个时间段里每一天的生产总量
比如说选择从1月7号到1月16号, 那么就显示这几天每天的总和

C 1月7号 6 (7号)
C 1月8号 13 (7号+8号)
C 1月9号 21 ...
C 1月10号 28
C 1月11号 35
C 1月12号 48
C 1月13号 57
C 1月14号 63
C 1月15号 70
C 1月16号 78
C 1月17号 88

lrxin 2009-01-21
  • 打赏
  • 举报
回复
是不是只要输入一个时间
那么就得到从第一天到你输入这个时间的生产量的总合对吧?

如果是,可以用下面的语句
select sum(生产量A)as A,sum(生产量B)as B,sum(生产量C)as C from 表 where 时间 < '输入的时间'

如果只是求两个时间之间的总和,可以用下面的

select sum(生产量A)as A,sum(生产量B)as B,sum(生产量C)as C from 表 where 时间 between '开始时间' and '结束时间'
pennymay 2009-01-21
  • 打赏
  • 举报
回复
名称 日期 生产量
A 1月1号 5
A 1月2号 7
A 1月3号 8
A 1月4号 9

B 1月1号 7
B 1月2号 7
B 1月3号 8
B 1月4号 8

C 1月1号 6
C 1月2号 7
C 1月3号 8
C 1月4号 7

变成

名称 日期 生产量
A 1月1号 5
A 1月2号 12
A 1月3号 20
A 1月4号 29

B 1月1号 7
B 1月2号 14
B 1月3号 22
B 1月4号 30

C 1月1号 6
C 1月2号 13
C 1月3号 21
C 1月4号 28

这是你要的结构吗??
百年树人 2009-01-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pennymay 的回复:]
如果是纵向存储, 应该如何实现呢???
谢谢
[/Quote]

表结构呢?
pennymay 2009-01-21
  • 打赏
  • 举报
回复
自己UP一下, 请大家帮帮忙啊~~谢谢!
pennymay 2009-01-21
  • 打赏
  • 举报
回复
如果是纵向存储, 应该如何实现呢???
谢谢
ghs79 2009-01-21
  • 打赏
  • 举报
回复
表结构有问题,应该是纵向存储,才好实现。
ghs79 2009-01-21
  • 打赏
  • 举报
回复
表结构有问题,
如果改成纵向存储就好实现了。

A 1月1号 5
A 1月2号 7
A 1月3号 8
A 1月4号 9
pennymay 2009-01-21
  • 打赏
  • 举报
回复

SELECT SUM(production.Production.Volume) AS Volume, production.Grade.GradeName, CONVERT(varchar(10), production.Production.CutDate, 120) AS CutDate
FROM production.Production INNER JOIN
production.Grade ON production.Production.GradeID = production.Grade.GradeID
GROUP BY CONVERT(varchar(10), production.Production.CutDate, 120), production.Grade.GradeName


这是从表里选择出我需要的数据, 就是每天每个GRADE的VOLUME量, 可是我想在选完以后, 每个日期再加上之前日期的VOLUME量(第1天除外)
百年树人 2009-01-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pennymay 的回复:]
没有更简单一点的SQL语句了吗?
因为选择的日期都是不定的, 有可能短时间, 也有可能非常长的时间
[/Quote]

你不表结构不是这样的吧? 把你的表结构贴出来,再贴点测试数据
pennymay 2009-01-21
  • 打赏
  • 举报
回复
没有更简单一点的SQL语句了吗?
因为选择的日期都是不定的, 有可能短时间, 也有可能非常长的时间
loworth 2009-01-21
  • 打赏
  • 举报
回复
如果一天为一个字段 只能类似1楼写法了吧

当然 如果字段允许为空 还要 ISNULL([1月1号],0)处理下
pennymay 2009-01-21
  • 打赏
  • 举报
回复
这个只是例子...是连续性, 如果选择了30天..不是要写30条吗...
自己顶一下
csdyyr 2009-01-21
  • 打赏
  • 举报
回复
表结构这样?
1月1号 1月2号 1月3号 1月4号。。。
A 5 7 8 9 。。。
B 7 7 8 8 。。。
C 6 7 8 7 。。。
百年树人 2009-01-21
  • 打赏
  • 举报
回复
如果只是这几个就这样
select 
1月1号,
1月1号+1月2号 as 1月2号,
1月1号+1月2号+1月3号 as 1月3号,
1月1号+1月2号+1月3号+1月4号 as 1月4号
from tb

34,575

社区成员

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

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