相关疑难解决方法(0)

SQL Server:一个查询中存在一行,另一个查询中缺少该行

好的,我想我一定是对SQL查询有些误解.这是一个非常罗嗦的问题,所以感谢花时间阅读它(我的问题在最后,其他一切都只是上下文).

我正在编写一个以复式本金为主的会计系统 - 货币总是在账户之间移动,交易是2 TransactionParts行或更多行减少一个账户并递增另一个账户.

某些TransactionParts行可能被标记为与税收相关,因此系统可以生成增值税销售/购买总额的报告等,因此单个交易可能有两个TransactionParts引用相同的帐户 - 一个增值税相关,另一个不相关.为了简化向用户的呈现,我有一个视图,可以为同一个帐户和事务组合多个行:

create view Accounting.CondensedEntryView as
select p.[Transaction], p.Account, sum(p.Amount) as Amount
    from Accounting.TransactionParts p 
    group by p.[Transaction], p.Account
Run Code Online (Sandbox Code Playgroud)

然后,我有一个计算运行平衡列的视图,如下所示:

create view Accounting.TransactionBalanceView as
with cte as
(
    select ROW_NUMBER() over (order by t.[Date]) AS RowNumber, 
                         t.ID as [Transaction], p.Amount, p.Account
        from Accounting.Transactions t
            inner join Accounting.CondensedEntryView p on p.[Transaction]=t.ID
)
select b.RowNumber, b.[Transaction], a.Account, 
                coalesce(sum(a.Amount), 0) as Balance
    from cte a, cte b
    where a.RowNumber <= b.RowNumber AND …
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2008

5
推荐指数
1
解决办法
2529
查看次数

CTE出乎意料的结果

我创建了一个使用多个CTE的复杂过程(主要用于递归分层工作).
在小样本数据集上,一切都按预期进行,但是当我将代码应用于大型数据集时,我收到了意外(和错误)的结果.

我想我已经把它缩小到了CTE.递归CTE是在几个早期CTE中处理的"馈送"数据,这似乎是问题所在.

我设置了一个示例数据集如下:

  • 四行具有唯一数据
  • 每行接收一个随机行号(这是在CTE中添加的

然后,我获取第一个CTE的结果,并在第二个CTE中执行自连接.
我期望所有行都加入,每个行都是自己的.实际发生的是不相等的行加入.

有人可以提供这种行为的解释吗?

sql common-table-expression sql-server-2008

2
推荐指数
1
解决办法
499
查看次数