sql显示12个月数据
2015-08-06 10:22
295 查看
需求
最近在做一个财务报表展示系统,Budget需要当月上传,还未上传月份的数据也需要显示出来。
数据库设计
cBudget表结构如下
插入测试数据,数据截至到今年的7月份
问题及解决方案
常规的写法直接select,F5执行,Oh My God~~~,显示的7月份的数据,绑定报表插件也只显示到7月份,和需求完全不符啊。
不要着急,下面就是master..spt_values发挥的时候了(当然,你也可以自己建一个存储1-12个数字的临时表),1到12月份的数据出来了
大致的原理就是这样,更为复杂的sql语句需要自己来变通了。
最近在做一个财务报表展示系统,Budget需要当月上传,还未上传月份的数据也需要显示出来。
数据库设计
cBudget表结构如下
CREATE TABLE [dbo].[cBudget]( [ID] [int] IDENTITY(1,1) NOT NULL, [Month] [int] NOT NULL, [Sales] [decimal](18, 0) NULL ) ON [PRIMARY] GO
插入测试数据,数据截至到今年的7月份
INSERT INTO [cBudget] VALUES(1,111) INSERT INTO [cBudget] VALUES(2,222) INSERT INTO [cBudget] VALUES(3,333) INSERT INTO [cBudget] VALUES(4,444) INSERT INTO [cBudget] VALUES(5,555) INSERT INTO [cBudget] VALUES(6,666) INSERT INTO [cBudget] VALUES(7,777)
问题及解决方案
常规的写法直接select,F5执行,Oh My God~~~,显示的7月份的数据,绑定报表插件也只显示到7月份,和需求完全不符啊。
不要着急,下面就是master..spt_values发挥的时候了(当然,你也可以自己建一个存储1-12个数字的临时表),1到12月份的数据出来了
select b.number as Month,ISNULL(a.Sales,0) as Sales from cbudget as a right join ( select number from master.dbo.spt_values AS T1 WHERE T1.type = 'P' AND T1.number between 1 and 12 ) b on b.number=a.month
大致的原理就是这样,更为复杂的sql语句需要自己来变通了。
相关文章推荐
- MySQL--用户管理和权限
- MySQL 加锁处理分析
- Redis——乐观锁控制事务
- 我如何调优SQL Server查询
- SQL SERVER数据库备份时出现“操作系统错误5(拒绝访问)。BACKUP DATABASE 正在异常终止。”错误的解决办法
- 使用MySQL命令行修改密码
- MySQL出现同步延迟有哪些原因?如何解决?
- MySQL出现同步延迟有哪些原因?如何解决?
- 哪三样东西永远不能放进数据库里
- Oracle初探(六)
- MySql存储过程与函数详解
- 修改mysql用户密码及资源限制
- 为什么在 Redis 实现 Lua 脚本事务?
- PLSQL 编程基础
- MySQL模糊查询中通配符的转义
- mysql中select distinct的用法
- Redis,Memcache,mongoDB的区别
- MYSQL 逻辑架构
- Orcle数据库恢复
- Redis,Memcache,mongoDB的区别