2015-10-20 81 views
0

我有一個像下面比較兩行

column1 column2 
110   100 
    50   125 
120   80 

我想以這樣的方式,我會得到這樣的事情

column1 column2 difference 
110   100   0 
    50   125   50 
120   80   5 

或僅僅是一個選擇,例如表能夠識別區別第2列第一行第二列第一列

+1

區別在於整數減法?你如何計算結果,「0」和「5」? –

+0

@YuZhang因爲100沒有其他數字要從它減去是'0'125 -120 = 5,100-50 = 50。在列之間對角地進行減法。我實際上想要將這個概念應用於查找meter reading_date與之前due_date之間的差異。 – bob269

回答

2

您可以用LEFT JOIN做到這一點:

SQL Fiddle

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

另一種方式,可能是這樣的:

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

+0

不客氣。這是我的+1! –