我有一个表格,例如下面的
column1 column2
110 100
50 125
120 80
我希望以这样的方式进行选择,我会得到类似的东西
column1 column2 difference
110 100 0
50 125 50
120 80 5
或者只是为了能够识别第2列第2行与第1列第1列
之间的差异答案 0 :(得分:2)
您可以使用LEFT JOIN
:
WITH Cte AS(
SELECT *,
rn = ROW_NUMBER() OVER(ORDER BY (SELECT NULL))
FROM tbl
)
SELECT
t1.*,
difference = ISNULL(t2.column2 - t1.column1, 0)
FROM cte t1
LEFT JOIN Cte t2
ON t1.rn = t2.rn + 1
由于没有列表示订单,我添加了ROW_NUMBER
。根据您的偏好修改ORDER BY
子句。
答案 1 :(得分:1)
另一种方式,可能是这样的:
SELECT TB.COLUMN1,TB.COLUMN2,
(ISNULL(TB2.COLUMN2,TB.COLUMN1)-TB.COLUMN1) AS 'DIF'
FROM
(SELECT COLUMN1,COLUMN2,ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1 AS 'R' FROM TEST ) TB
LEFT JOIN
(SELECT COLUMN1,COLUMN2,ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS 'R' FROM TEST ) TB2
ON TB.R = TB2.R
直到帖子发布之前我都不知道怎么不让row_number'按顺序排序。影响查询,但基于上面的答案,现在我知道了,使用select null;)谢谢@Felix Pamittan