sql – 为财务报表构建数据库

我正在寻找构建我的数据库的最佳方法.我有1997年至2012年的1000家公司的季度财务报表.每家公司都有三种不同的报表,即损益表,资产负债表和现金流量表.

我希望能够对数据进行计算,例如每季度相加以获得每个语句中每个订单项的年度总计.

到目前为止,我尝试了两种方法

1)在每个语句的自己的表中存储每个行项目,即Sales将是一个表,并且只有我正在跟踪的所有公司的销售数据,公司作为主键,每个季度数据作为单独的列.这似乎是处理数据的最简单方法,但每个季度更新数据非常耗时,因为有数百个表.

Sales Table
Company q32012  q22012  q12012
ABC Co.  500    100 202
XYZ Co. 230 302 202

2)另一个更容易更新但更难处理数据的选项是为每个语句为每个公司设置一个单独的表.例如,皇家银行的损益表将拥有自己的表,主要列是行项目.

Income Statement for Royal Bank
Line_Item   q32012  q22012  q12012
Sales            
Net Profit           

这里的问题是,当我尝试对这些数据进行年度化时,由于该组,我得到了一个非常难看的输出

SELECT    
(CASE WHEN Line_Item = 'Sales' THEN SUM(q4 + q3 + q2 + q1) ELSE '0' END) AS Sales2012,(CASE WHEN Line_Item = 'NetProfit' THEN SUM(q4 + q3 + q2 + q1) 
      ELSE '0' END) AS Inventories2012
FROM            dbo.[RoyalBankIncomeStatement]
GROUP BY Line_Item

任何帮助,将不胜感激.

解决方法

每当我必须按财政季度,月份或年度或其他任何方式构建财务报告数据库时,我发现从星型模式设计和数据仓库中借用一个概念很方便,即使我没有真正建立一个DW.

借用的概念是有一个表,我们称之为ALMANAC,每个日期都有一行,按日期键入.在这种情况下,自然键很好用.这里的相关属性可以是日期所属的财务月份和季度,日期是企业营业的日期(TRUE或FALSE),以及公司日历中的其他任何怪癖.

然后,您需要一个只能从中生成此表的计算机程序.公司日历的所有奇怪规则都嵌入在这个程序中. ALMANAC可以覆盖超过3,650行的十年时间.那是一张小桌子.

现在,只要您始终对日期使用Date数据类型,操作数据中的每个日期都可以像外键一样用于ALMANAC表.例如,每个销售都有销售日期.然后按财政季度或财政年度或任何您喜欢的方式进行汇总只需要与ALMANAC合并运营数据,并使用GROUP BY和SUM()来获得您想要的汇总.

它很简单,它可以轻松生成大量的时间段报告.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03