admin

复制上个月的值并插入新行

sql

这是我当前表的一个示例:

1)表名称:TotalSales

Name    Year  Month  Sales
------  ----  -----  -----
Alfred  2011  1      100

我想做的是创建一个像这样的表,添加一个新行(前一个月的销售):

2)表名称:TotalSales

Name    Year  Month  Sales  Prior month sales
------  ----  -----  -----  -----------------
Alfred  2011  2      110    100

不知道如何做到这一点,但这就是我一直在从事的工作:

SELECT Name, Year, Month, Sales, Sales as [Prior Month sales]
FROM TotalSales
WHERE
DATEPART(month, [Prior Month sales]) = DATEPART(month, DATEADD(month, -1, getdate()))

谢谢你的帮助


阅读 153

收藏
2021-06-07

共1个答案

admin

要选择给定的数据,您需要将表连接到自身:

SELECT
    TS.name,
    TS.year,
    TS.month,
    TS.sales,
    COALESCE(TS2.sales, 0) AS prior_month_sales
FROM
    TotalSales TS
LEFT OUTER JOIN TotalSales TS2 ON
    TS2.name = TS.name AND
    (
        (TS2.year = TS.year AND TS2.month = TS.month - 1) OR
        (TS.month = 1 AND TS2.month = 12 AND TS2.year = TS.year - 1)
    )

LEFT OUTER JOIN如果他们上个月(或这是他们在公司的第一个月)没有任何销售,这是一个外部加入。

2021-06-07