比较两列中的两行

时间:2015-10-20 23:34:03

标签: sql sql-server sql-server-2008

我有一个表格,例如下面的

column1    column2
 110         100
  50         125
 120          80

我希望以这样的方式进行选择,我会得到类似的东西

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

或者只是为了能够识别第2列第2行第1列第1列

之间的差异

2 个答案:

答案 0 :(得分: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 :(得分: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