2

首先我的结果是这样的:

康顿 塞尔卡普斯科德 贝洛普
459611 1 巴加 156000
459611 2 巴加 73000
459611 4 巴加 217000
459611 5 巴加 136000
459611 1 西沃 45896
459611 3 西沃 32498
459611 4 西沃 9841
330096 1 巴加 42347
330096 3 巴加 3695

我正在尝试在多个帐户上显示 2 个月的预订,每个帐户 ( KONTONR) 有几个代码 ( SELSKAPSKODE) 记录了预订(预订总和为BELOP)。我想概述BELOP每个帐户 ( KONTONR) 每个代码 ( ) 每月的预订 ( ) 总和SELSKAPSKODE。我的问题是,如果没有对该代码进行预订,则该代码不会在一个月内显示。有没有办法解决这个问题?我理解为什么代码不显示,因为它们根本不在我要查询的表中。而且我怀疑解决方案是制作一个“假”表,然后将其与“另一个”表连接(左外连接?)。
我只是无法让它工作,我对 SQL 很陌生。有人可以帮忙吗?
我的查询看起来像这样(我只插入了“嵌套”查询来设置连接,如果这有意义吗?!):

SELECT TOP (100) PERCENT KONTONR, Month, SELSKAPSKODE, BELOP
FROM (
    SELECT SELSKAPSKODE, KONTONR, SKIPS_KODE, MONTH(POSTDATO) AS Month, SUM(BELOP) AS BELOP
    FROM dbo.T99_DETALJ
    WHERE (POSTDATO >= '2012-01-01') AND (BILAGSART = 0 OR BILAGSART = 2)
    GROUP BY SELSKAPSKODE, KONTONR, SKIPS_KODE, MONTH(POSTDATO)
    ) AS T99_summary
GROUP BY KONTONR, SELSKAPSKODE, Month, BELOP
ORDER BY KONTONR, SELSKAPSKODE, Month

所以最后我想“填补”缺失的月份(见开头的表格),例如账户 ( KONTONR) 459611 第 3 个月是“缺失的”。我想显示第 3 个月,预订总和 ( BELOP) 为“0”。非常感谢任何帮助,在此先感谢!

4

3 回答 3

4

您可以使用值 1-12 查询表并左外连接您的结果。

这是一个使用表变量而不是您的查询和 CTE 来构建带有数字的表的示例。

declare @T table
(
  Month int
)

insert into @T values(1)
insert into @T values(1)
insert into @T values(1)
insert into @T values(3)
insert into @T values(3)

;with Months(Month) as
(
  select 1
  union all
  select Month + 1
  from Months
  where Month < 12
)
select M.Month,
       count(T.Month) Count,
       isnull(sum(T.Month), 0) Sum
from Months as M
  left outer join @T as T
    on M.Month = T.Month
group by M.Month

结果:

Month       Count       Sum
----------- ----------- -----------
1           3           3
2           0           0
3           2           6
4           0           0
5           0           0
6           0           0
7           0           0
8           0           0
9           0           0
10          0           0
11          0           0
12          0           0
于 2012-05-02T15:19:02.470 回答
0

如果你不想做所有这些你也可以修改这个: SUM(BELOP) 和这个: Sum (当 BELOP 不为空时的情况,然后 1 否则 0 结束)

于 2013-02-09T19:10:19.033 回答
0

如果您有计算的交互的创建日期,您也可以添加年份,如果您的交互跨越多年,这可能会有所帮助。

with Months(Month) as
(
  select 1
  union all
  select Month + 1
  from Months
  where Month < 12
)
select M.Month, year(CreatedOn) as Year,
       count(amount) Count,
       isnull(sum(amount), 0) Sum
from Months as M
  left outer join Charge as C
    on M.Month = (month(CreatedOn))
group by M.Month, year(CreatedOn) order by year(CreatedOn)

输出

于 2020-02-07T18:33:40.853 回答