当前位置:  开发笔记 > 数据库 > 正文

获取每月数据即使是空的

如何解决《获取每月数据即使是空的》经验,为你挑选了1个好方法。

我正在尝试从数据挖掘我们的会计软件中获取报告.

我们有一个表格,用于存储每个帐户在给定期间的总帐中的余额(0-12,0从去年开始结转,1-12是相应的月份),金额和其他数据我不需要.

我试图为每个月的每个帐户获取一个值,但是并不总是有相应的条目.我已经尝试过左外连接,交叉连接,内连接,似乎无法按照我想要的方式工作.我甚至尝试使用包含'Initial'作为项目0和其他12个条目的表来执行左外连接,每个月有一个名称.

这是一个数据样本:

GLBalances表:

acct_no  |  post_prd  | post_trn_amt
  1011   |     0      |  -15000
  1011   |     1      |  5000
  1011   |     2      |  -6000
  1011   |     4      |  8000
  1020   |     5      |  100
  1020   |     12     |  300
  1011   |     9      |  500
  1011   |     8      |    0
etc...

我想要的是:

 acct_no | post_prd   | post_trn_amt
  1011   |     0      |  -15000
  1011   |     1      |  5000
  1011   |     2      |  -6000
  1011   |     3      |     0
  1011   |     4      |  8000
  1011   |     5      |     0
  1011   |     6      |     0
  1011   |     7      |     0
  1011   |     8      |     0
  1011   |     9      |   500
  1011   |     10     |     0
  1011   |     11     |     0
  1011   |     12     |     0
  1020   |     0      |     0
  1020   |     1      |     0
  1020   |     2      |     0
  1020   |     3      |     0
  1020   |     4      |     0
  1020   |     5      |     100
  1020   |     6      |     0
  1020   |     7      |     0
  1020   |     8      |     0
  1020   |     9      |     0
  1020   |    10      |     0
  1020   |    11      |     0
  1020   |    12      |     300

等等...

因此,即使在该期间没有条目,特定年份的每个帐户基本上也有13个条目.

我确信这比我做的更容易,我只是苦苦挣扎,因为我每天都不处理SQL.任何帮助将非常感激.



1> Andomar..:

您可以使用交叉联接创建一张有效帐户和月份.使用左连接查找相应的"实际"行,并设置:

;with months as
(
    select 0 as Month
    union all
    select Month + 1 from months where Month < 12
)
select a.acct_no, m.month as post_prd, IsNull(g.post_trn_amt,0)
from months m
cross join (select  distinct acct_no from @GLBalances) a
left join @GLBalances g 
    on m.month = g.post_prd 
    and a.acct_no = g.acct_no
order by a.acct_no, m.month

"with months as"构造是一种创建包含数字0到12的表的奇特方法.您还可以创建包含这些数字的实际表,并取消"递归公用表表达式"构造.

这是我使用的测试数据:

declare @GLBalances table (acct_no int, post_prd int, post_trn_amt int)
insert into @GLBalances
select 1011,0,-15000
union all select 1011, 1, 5000
union all select 1011, 2, -6000
union all select 1011, 4, 8000
union all select 1020, 5, 100
union all select 1020, 12, 300
union all select 1011, 9, 500
union all select 1011, 8, 0

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有