Sql server 2008 在SQLServer2008中如何使用递归CTE分层计算字段值之和

Sql server 2008 在SQLServer2008中如何使用递归CTE分层计算字段值之和,sql-server-2008,Sql Server 2008,我有一个带有以下列的表tbSale: [CustomerCode] [bigint] NULL, [SaleNum] [decimal](18, 0) NOT NULL, [time] [char](8) NULL, [date] [char](8) NULL, [PreviousSaleNum] [decimal](18, 0) NULL [SaleNum] [decimal](18, 0) NULL, [ProductCode] [bigint] NULL, [price] [bigint

我有一个带有以下列的表
tbSale

[CustomerCode] [bigint] NULL,
[SaleNum] [decimal](18, 0) NOT NULL,
[time] [char](8) NULL,
[date] [char](8) NULL,
[PreviousSaleNum] [decimal](18, 0) NULL
[SaleNum] [decimal](18, 0) NULL,
[ProductCode] [bigint] NULL,
[price] [bigint] NULL,
[code] [bigint] NOT NULL,
[count] [float] NULL
以及另一个包含以下列的表
tbSaleDetails

[CustomerCode] [bigint] NULL,
[SaleNum] [decimal](18, 0) NOT NULL,
[time] [char](8) NULL,
[date] [char](8) NULL,
[PreviousSaleNum] [decimal](18, 0) NULL
[SaleNum] [decimal](18, 0) NULL,
[ProductCode] [bigint] NULL,
[price] [bigint] NULL,
[code] [bigint] NOT NULL,
[count] [float] NULL
tbSale
中的
[SaleNum]
是主键,而
tbSaleDetails
中的
[code]
也是主键。
tbSale.[SaleNum]
tbSaleDetails.[SaleNum]
之间存在关系;另外,在
tbSale.[SaleNum]
tbSale.[PreviousSaleNum]
之间存在一种关系,它将销售与特定客户以前的销售相关联


问题:我想为所有销售及其以前的销售显示所有行的
总和(tbSaleDetails.[price]*tbSaleDetails.[count])
,该值在
[PreviousSaleNum]
中给出。我需要一个递归的CTE来完成这项工作(我想)。但我不知道怎么做。我不能在CTE的递归语句中使用
SUM()
,因为它会抛出错误。

你说你需要一个递归CTE,为什么?据我所知,您需要当前和以前的金额。行是否应仅包括最近的销售(在销售线程中)以及该销售和以前所有销售的总额?或者,您是在寻找销售线索时间点之前的每一笔销售和所有以前的销售(如运行总数)?“销售线索”中的销售是否会超过32767笔ツ 我想要当前销售总额加上[PreviousSaleNum]中给出的上一次销售总额,[PreviousSaleNum]本身有[PreviousSaleNum]字段,依此类推。这就是我需要递归CTE的原因。@8kb:每行包括当前行的[price]*[count]之和+上一次销售的[price]*[count]之和,这在[PreviousSaleNum]字段中给出。[PreviousSaleNum]与[SaleNum]有关系,并且两者位于同一个表中。换句话说,tbSale与自身之间存在着关系。我要查找的结果是一个表,其中包括[SaleNum]、[CustomerCode]、[time]、[date]、SUM([price]*[count])。在这个表中,SUM([price]*[count])不仅计算当前行的总和,还加上[PreviousSaleNum]中给出的上一次销售的总和。您说您需要一个递归CTE,为什么?据我所知,您需要当前和以前的金额。行是否应仅包括最近的销售(在销售线程中)以及该销售和以前所有销售的总额?或者,您是在寻找销售线索时间点之前的每一笔销售和所有以前的销售(如运行总数)?“销售线索”中的销售是否会超过32767笔ツ 我想要当前销售总额加上[PreviousSaleNum]中给出的上一次销售总额,[PreviousSaleNum]本身有[PreviousSaleNum]字段,依此类推。这就是我需要递归CTE的原因。@8kb:每行包括当前行的[price]*[count]之和+上一次销售的[price]*[count]之和,这在[PreviousSaleNum]字段中给出。[PreviousSaleNum]与[SaleNum]有关系,并且两者位于同一个表中。换句话说,tbSale与自身之间存在着关系。我要查找的结果是一个表,其中包括[SaleNum]、[CustomerCode]、[time]、[date]、SUM([price]*[count])。在这个表中,SUM([price]*[count])不仅计算当前行的总和,还加上[PreviousSaleNum]中给出的上一次销售的总和。您说您需要一个递归CTE,为什么?据我所知,您需要当前和以前的金额。行是否应仅包括最近的销售(在销售线程中)以及该销售和以前所有销售的总额?或者,您是在寻找销售线索时间点之前的每一笔销售和所有以前的销售(如运行总数)?“销售线索”中的销售是否会超过32767笔ツ 我想要当前销售总额加上[PreviousSaleNum]中给出的上一次销售总额,[PreviousSaleNum]本身有[PreviousSaleNum]字段,依此类推。这就是我需要递归CTE的原因。@8kb:每行包括当前行的[price]*[count]之和+上一次销售的[price]*[count]之和,这在[PreviousSaleNum]字段中给出。[PreviousSaleNum]与[SaleNum]有关系,并且两者位于同一个表中。换句话说,tbSale与自身之间存在着关系。我要查找的结果是一个表,其中包括[SaleNum]、[CustomerCode]、[time]、[date]、SUM([price]*[count])。在此表中,SUM([price]*[count])不仅计算当前行的总和,还加上[PreviousSaleNum]中给出的上一次销售的总和。