基本上我有一個回圈,我在其中更改表的每個值的編號,在回圈中我有一個變數以增加值的數量,讓我們呼叫它@IdTop,在回圈的每次迭代中它增加 1。所以我做了一個回圈,現在按順序更改每個值(每個值都有一個序列號)我從表中選擇頂部 x,然后從該選擇中選擇頂部 1。所以,我要的是訂購表,我從這個獲得SELECT TOP(@IdTop) * FROM tableX WHERE Constraint = 55510通過ID DESC,然后從中選擇頂部1。這是我嘗試過的,但它沒有做我想要的:
Select TOP(1) T.ID FROM ((SELECT TOP(3) * FROM tableX WHERE Constraint = 55510) ORDER BY ID DESC) AS T
例如,該表按行具有以下值:
| ID | 序列號 |
|---|---|
| 123 | 3 |
| 134 | 4 |
| 155 | 5 |
| 156 | 2 |
| 180 | 1 |
迭代示例:
迭代 1:
@IdTop = 1
當 ID 為 123 時,SequentialNumber 更改為 1
迭代 2:
@IdTop = 2
當 ID 為 134 時,SequentialNumber 更改為 2
...
迭代 5:
@IdTop = 5
當 ID 為 180 時,SequentialNumber 更改為 5
這是我做的回圈:
DECLARE @IdTop int = 1
WHILE @IdTop < (Select MAX(SequentialNumber) From OriginalTable WHERE Constraint = 55510)
BEGIN
UPDATE OriginalTable SET SequentialNumber = @IdTop WHERE ID =
(Select TOP(1) T.ID FROM (SELECT TOP(@IdTop) * FROM OriginalTable WHERE Constraint = 55510 ORDER BY ID DESC) AS T)
SET @IdTop = @IdTop 1
END
回圈后的表:
| ID | 序列號 |
|---|---|
| 123 | 1 |
| 134 | 2 |
| 155 | 3 |
| 156 | 4 |
| 180 | 5 |
uj5u.com熱心網友回復:
我認為這是:
(Select TOP(1) T.ID
FROM (SELECT TOP(@IdTop) *
FROM OriginalTable
WHERE Constraint = 55510
ORDER BY ID DESC
) AS T
)
是一種困難的寫作方式:
SELECT MAX(T.ID)
FROM OriginalTable
WHERE constraint = 55510
ORDER BY ID DESC
也可以通過執行以下操作獲得結果:
UPDATE OriginalTable
SET ID = t.R
FROM (SELECT
id,
row_number() over (order by id) as R
FROM OriginalTable
WHERE Constraint = 55510
) AS T
WHERE T.ID = OriginalTable.ID
uj5u.com熱心網友回復:
我建議改用通用表運算式,即 CTE,如下所示:
DECLARE @tbl TABLE(ID int, SeqNr int)
INSERT INTO @tbl VALUES (123, 3),(134, 4),(155, 5),(156, 2),(180, 1)
SELECT * FROM @tbl ORDER BY ID
;WITH MyFirstCTE AS
(SELECT ID AS ROW_ID, ROW_NUMBER() OVER(ORDER BY ID ASC) AS ROW_NUM FROM @tbl)
UPDATE @tbl
SET SeqNr = ROW_NUM
FROM MyFirstCTE
WHERE ID = ROW_ID
SELECT * FROM @tbl ORDER BY ID
第一個 SELECT 的輸出:
ID SeqNr
----------- -----------
123 3
134 4
155 5
156 2
180 1
第二個 SELECT 的輸出:
ID SeqNr
----------- -----------
123 1
134 2
155 3
156 4
180 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/379327.html
標籤:sql sql-server
上一篇:通過分組id獲取最新記錄
