我有一个像下面比较两行
column1 column2
110 100
50 125
120 80
我想以这样的方式,我会得到这样的事情
column1 column2 difference
110 100 0
50 125 50
120 80 5
或仅仅是一个选择,例如表能够识别区别第2列第一行和第二列第一列
我有一个像下面比较两行
column1 column2
110 100
50 125
120 80
我想以这样的方式,我会得到这样的事情
column1 column2 difference
110 100 0
50 125 50
120 80 5
或仅仅是一个选择,例如表能够识别区别第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
条款。
另一种方式,可能是这样的:
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“ORDER BY”影响了查询,但基于上面的回答,现在我知道了它,使用select null;)谢谢@Felix Pamittan
不客气。这是我的+1! –
区别在于整数减法?你如何计算结果,“0”和“5”? –
@YuZhang因为100没有其他数字要从它减去是'0'125 -120 = 5,100-50 = 50。在列之间对角地进行减法。我实际上想要将这个概念应用于查找meter reading_date与之前due_date之间的差异。 – bob269