以下是我当前的表格的示例:
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()))
感谢您的帮助
答案 0 :(得分:2)
我相信这应该有效......你需要在名字/上个月加入自己,但是你有2个测试用例,因为年/月分别存储上个月。
select c.Name, c.Year, c.Month, c.Sales, p.Sales
from TotalSales c
left join TotalSales p
on c.Name = p.Name and (
(c.Month > 1 and c.Year = p.Year and c.Month = p.Month + 1)
or (c.Month = 1 and c.Year = p.Year + 1 and p.Month = 12))
答案 1 :(得分:1)
要选择给定的数据,您需要将表连接到自身:
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
是外部联接,以防上个月没有任何销售(或者这是他们与公司的第一个月)。
答案 2 :(得分:0)
尝试这样的方法只是用你想要的值更新表格......
UPDATE TotalSales
SET PriorMonthSales =
(
SELECT TS.Sales
FROM TotalSales TS
WHERE
(TotalSales.Month = TS.Month + 1 AND TotalSales.Year = TS.Year)
OR
(TotalSales.Month = 1 AND TS.Month = 12 AND TS.Year = TotalSales.Year -1)
)