Sql 比较两列中的两行

Sql 比较两列中的两行,sql,sql-server,sql-server-2008,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的第一行与列1的第二行

例如,我有一张如下所示的表格

column1    column2
 110         100
  50         125
 120          80
我想要一个这样的选择,我会得到这样的东西

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

或者,为了能够识别列2的第一行与列1的第二行之间的差异,您可以使用
左连接来执行此操作:


因为没有列来指示顺序,所以我添加了一个
行编号
。根据您的喜好修改
ORDER BY
子句。

您可以使用
左连接来执行此操作:


因为没有列来指示顺序,所以我添加了一个
行编号
。根据您的喜好修改
ORDER BY
子句。

您可以使用
左连接来执行此操作:


因为没有列来指示顺序,所以我添加了一个
行编号
。根据您的喜好修改
ORDER BY
子句。

您可以使用
左连接来执行此操作:


因为没有列来指示顺序,所以我添加了一个
行编号
。根据您的喜好修改
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 

在发布之前,我不知道如何不让行号“order by”影响查询,但根据以上答案,现在我知道了,使用select null;)谢谢@Felix Pamittan

另一种方式是:

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 

在发布之前,我不知道如何不让行号“order by”影响查询,但根据以上答案,现在我知道了,使用select null;)谢谢@Felix Pamittan

另一种方式是:

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 

在发布之前,我不知道如何不让行号“order by”影响查询,但根据以上答案,现在我知道了,使用select null;)谢谢@Felix Pamittan

另一种方式是:

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 

在发布之前,我不知道如何不让行号“order by”影响查询,但根据以上答案,现在我知道了,使用select null;)谢谢@Felix Pamittan

整数减法中的差值是多少?你是如何计算结果的,“0”和“5”的?@YuZhang,因为100没有其他可以从中减去的数字是“0”125-120=5,100-50=50。减法是在列之间对角进行的。实际上,我想把这个概念应用于求一个抄表日期和上一个到期日期之间的差,这个差是整数减法吗?你是如何计算结果的,“0”和“5”的?@YuZhang,因为100没有其他可以从中减去的数字是“0”125-120=5,100-50=50。减法是在列之间对角进行的。实际上,我想把这个概念应用于求一个抄表日期和上一个到期日期之间的差,这个差是整数减法吗?你是如何计算结果的,“0”和“5”的?@YuZhang,因为100没有其他可以从中减去的数字是“0”125-120=5,100-50=50。减法是在列之间对角进行的。实际上,我想把这个概念应用于求一个抄表日期和上一个到期日期之间的差,这个差是整数减法吗?你是如何计算结果的,“0”和“5”的?@YuZhang,因为100没有其他可以从中减去的数字是“0”125-120=5,100-50=50。减法是在列之间对角进行的。实际上,我想将这个概念应用于找出抄表日期和上一个到期日期之间的差异。