我有了这个表,现在我需要对金额列进行除法运算,并在CalcAmt中更新数据
month amt CalcAmt
JAN 10000 NULL
FEB 20000 NULL
MAR 30000 NULL
APR 40000 NULL例如:( Feb /JAN)然后将输出存储在FEB的CalcAmt中,( MAR /FEB)然后将输出存储在MAR的CalcAmt中,
预期输出:
month amt CalcAmt
JAN 10000 0
FEB 20000 2
MAR 30000 1.5
APR 40000 1.33发布于 2015-07-11 13:17:42
这可以通过LEAD/LAG轻松完成,因为您正在使用Sql Server 2008,所以不能使用LEAD/LAG函数。相反,使用可以为每一行生成行号,并使用行号+1自连接相同的表,以获取前一行数据。
注意:如果有,您需要将剩余的months添加到order in case语句中。
另外,您不应该使用作为对象名称ex: MONTH
;WITH cte
AS (SELECT Rn=CASE [month]
WHEN 'Jan' THEN 1
WHEN 'feb' THEN 2
WHEN 'mar' THEN 3
ELSE 4
END,
*
FROM YOURTABLE)
SELECT A.month,
A.amt,
CalcAmt = A.amt / NULLIF(b.amt ,0)
FROM cte A
LEFT OUTER JOIN cte B
ON A.rn = b.rn + 1 如果你想要更新表,那么使用这个。
;WITH cte
AS (SELECT Rn=CASE [month]
WHEN 'Jan' THEN 1
WHEN 'feb' THEN 2
WHEN 'mar' THEN 3
ELSE 4
END,
*
FROM YOURTABLE)
UPDATE C
SET C.calcamt = D.calcamt
FROM cte C
INNER JOIN (SELECT A.month,
A.amt,
calcamt=A.amt / b.amt
FROM cte A
LEFT OUTER JOIN cte B
ON A.rn = b.rn + 1) D
ON C.[month] = D.[month] https://stackoverflow.com/questions/31353648
复制相似问题