CaptainChizni Ответов: 2

Как сбросить инкремент через условие?


DECLARE @intFlag INT
SET @intFlag = 1
UPDATE #temp_patrons
		set
			 @intFlag = [order] = @intFlag + 1
			 IF @intFlag = 3
			 BEGIN
			   SET @intFlag = 1
             END


Что я уже пробовал:

я попробовал использовать цикл или случаи, но ничего не получилось.
Результат будет таким.
EX.
| order |
|   1   |
|   2   | 
|   3   |
|   1   |
|   2   |
|   3   |

2 Ответов

Рейтинг:
9

OriginalGriff

Нет петель, нет, если требуется:

UPDATE x SET x.[Order] = x.NewOrder
FROM (SELECT [Order], ((ROW_NUMBER() OVER(ORDER BY myOrderingColumnName) - 1) % 3) + 1 AS NewOrder 
      FROM MyTable) x;


Рейтинг:
16

Bryian Tan

Можете ли вы сделать что-то вроде ниже?

1. Увеличить флаг
2. Если флаг = 3, сбросьте значение на 1
3. Операция обновления

SET @intFlag = @intFlag + 1

	IF (@intFlag = 3)
		SET @intFlag = 1
	
	UPDATE #temp_patrons
		SET [order] = @intFlag


CaptainChizni

Все строки равны 1. То что я собираюсь сделать это увеличить число на 1 а затем если оно достигнет 3 то приращение будет сброшено
ЭКС.
| приказ |
| 1 |
| 2 |
| 3 |
| 1 |
| 2 |
| 3 |

Bryian Tan

Не совсем понятно, что должен делать ваш запрос, но я предполагаю, что есть цикл? Я буду использовать Insert в качестве примера, потому что я уверен, что в нем есть еще что-то с инструкцией update.

DECLARE @test TABLE ([order] INT)

DECLARE @intFlag INT, @loopCount INT
SELECT @intFlag = 0, @loopCount = 0

WHILE (@loopCount < 6)
BEGIN
	SET @intFlag = @intFlag + 1

		IF (@intFlag > 3)
			SET @intFlag = 1
	
		INSERT INTO @test
			SELECT @intFlag

		SET @loopCount = @loopCount + 1
END


SELECT * FROM @test


Выход:
приказ
1
2
3
1
2
3