我有一种情况,我有一组账户,随着时间的推移,会根据这些账户输入日记账分录:
帐户 |
---|
A |
B |
C |
D |
一种方法是使用交叉连接来获取丢失的行。(底部的DB Fiddle(
交叉联接将生成一个集合,其中每个帐户都有来自日记账的每个日期
然后我们可以在日记账上再次联接以检索其他列
declare @Account table (Account varchar(10))
declare @Journal table (JournalDate date, Account varchar(10), Change int)
insert into @Account values ('A'), ('B'), ('C'), ('D')
insert into @Journal values ('20220101', 'A', 10), ('20220101', 'B', 20), ('20220101', 'C', 0), ('20220101', 'D', 0),
('20220102', 'A', 70), ('20220103', 'A', 40), ('20220103', 'D', 100), ('20220104', 'C', 25)
select jc.JournalDate,
a.Account,
j.Change
from @Account a
cross join (select distinct j.JournalDate from @Journal j) jc
left join @Journal j on jc.JournalDate = j.JournalDate and a.Account = j.Account
结果是
JournalDate | 账户 | 更改|
---|---|---|
2022-01-01 | A | 10 |
2022-01-01 | B | 20 |
2022-01-01 | C | 0 |
2022-01-01 | D | 0 |
2022-01-02 | A | 70 |
2022-01-02 | B | 空 |
2022-01-02 | C | 空 |
2022-01-02 | D | 空 |
2022-01-03 | A | 40 |
2022-01-03 | B | 空 |
2022-01-03 | C | 空 |
2022-01-03 | D | 100 |
2022-01-04 | A | 空 |
2022-01-04 | B | 空 |
2022-01-04 | C | 25 |
2022-01-04 | D | 空 |