实际上我需要的是这样的:我有一行有这么多列,我的脚本应该计算从最高和第二高开始,然后是第二高和第三高的差异......它就是这样。 那么Sql server甚至不能计算出一行中的最大值(据我所知,它可以在一列中计算出最大值) 所以我在我的桌子上使用了pivot,现在我有一列。我订购它们从最大到最低,现在我需要的是,我将如何获得差异:第一个值减去第二个值,第二个值减去第三个值......
答案 0 :(得分:0)
有两种方法可以做到这一点 - 你应该阅读sql server分析和窗口函数。
鉴于
DROP TABLE T
CREATE TABLE T (ID INT)
INSERT INTO T VALUES
(1),(10),(2),(5)
您可以使用滞后分析功能
SELECT ID ,
LAG(ID, 1,0) OVER (ORDER BY ID DESC) LAGID,
ID - LAG(ID, 1,0) OVER (ORDER BY ID DESC) DIFF
FROM T
结果
ID LAGID DIFF
----------- ----------- -----------
10 0 10
5 10 -5
2 5 -3
1 2 -1
(4 row(s) affected)
或使用row_number()窗口函数
SELECT TID,TRN,UID,URN, TID - UID AS DIFF
FROM
(
SELECT T.ID TID
,ROW_NUMBER() OVER (ORDER BY T.ID DESC) TRN
FROM T
) S
LEFT JOIN
(SELECT ID UID
,ROW_NUMBER() OVER (ORDER BY ID DESC) URN
FROM T
) U
ON URN = TRN - 1
结果
TID TRN UID URN DIFF
----------- -------------------- ----------- -------------------- -----------
10 1 NULL NULL NULL
5 2 10 1 -5
2 3 5 2 -3
1 4 2 3 -1
(4 row(s) affected)