递归选择表之间的连接

时间:2015-04-08 21:04:24

标签: recursive-query coalesce

我想查询2个表财务日历表(CalendarDate-RNZCDTE,FiscalYear-RNZFSYR,FiscalPeriod-RNZFSPD)和回扣表,以根据上次发票日期获得每个期间的Priceperunit金额。我可以获得最后一个发票日期和购买发生期间的金额,但挑战是每个期间可能没有值,所以我需要递归或从之前的perriods中选择第一个非空值。不确定如何在不构建一些奢侈的案例结构的情况下递归。

每个项目必须具有每个期间的值, 谢谢

表1

CREATE TABLE [dbo].[RenziFiscalDates](
    [RNZCDTE] [numeric](8, 0) NULL,
    [RNZFSYR] [numeric](4, 0) NULL,
    [RNZFSPD] [numeric](2, 0) NULL)

表2-注意DID是购买的商品编号

CREATE TABLE [dbo].[PurchaseRebate](
    [DID] [nvarchar](50) NULL,
    [PricePerUnitDel] [money] NULL,
    [PricePerUnitFOB] [money] NULL,
    [InvoiceDate] [smalldatetime] NULL,
    [ReceivedDate] [smalldatetime] NULL,

当前查询让我获得maxdate和价格信息

SELECT  
DID,   
MAX(CONVERT(VARCHAR(8), InvoiceDate, 112)) AS RZTMXDT,
MONTH(InvoiceDate)RZTCALY,
YEAR(InvoiceDate)as RZTCALM,
AVG(PricePerUnitDel) AS RZRDELC, 
AVG(PricePerUnitFOB) AS RZTFOBC 
FROM         PurchaseRebate
WHERE     (InvoiceDate > '20131231') AND (DID < '99999')
group by DID,YEAR(InvoiceDate),MONTH(InvoiceDate)
Order by DID

每个会计期间的数据缺失值

DID RNZFSYR RNZFSPD RZRDELC RZTFOBC
10040   2014    3   3.04    3.04
10040   2014    5   3.04    3.04
10040   2014    6   3.04    3.04
10040   2014    6   3.04    3.04
10040   2014    7   3.04    3.04
10040   2014    9   3.04    3.04
10040   2014    11  3.12    3.12
10040   2014    11  3.12    3.12
10040   2014    12  3.12    3.12
10040   2015    2   3.12    3.12
10040   2015    3   3.12    3.12
10040   2015    4   3.12    3.12
10040   2015    5   3.12    3.12
10040   2015    6   3.12    3.12
10045   2014    4   2.34    2.34


Any help is greatly appreciated

RDBMS - 是SQL Server

不确定合并在这种情况下是否有效或如何正确使用

0 个答案:

没有答案