我有一個像下面比較兩行
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