¿Cómo puedo actualizar una columna en una tabla para seguir un patrón específico? Actualmente mi DesiredResultAfterUpdate está vacío y quiero configurarlo para que sea 1,2,3 para los ID 1,2,3. Entonces sería 1,2,3 para el próximo conjunto de ID, (ID4,5,6 y 7,8,9 y así sucesivamente).

ID DesiredResultAfterUpdate Name
1  1                        My First Row
2  2                        My 2nd Row
3  3                        My Third Row
4  1                        My Forth Row
5  2                        My Fifth Row
6  3                        My Next Row
7  1                        My 7th Row
8  2                        etc
9  3                        etc

Hasta ahora lo intenté

UPDATE coins set coin_Row = 1
UPDATE coins set coin_Row = 2 where coin_SortOrder%2=0
UPDATE coins set coin_Row = 3 where coin_SortOrder%3=0

Que solo funcionó por cada 3er elemento ... (Impactante)

0
Иво Недев 3 mar. 2018 a las 22:14

4 respuestas

La mejor respuesta

Creo que esto hará lo que quieras, usando tus consultas de ACTUALIZACIÓN como ejemplo:

UPDATE coins
SET coin_Row = (coin_SortOrder-1) % 3 + 1;
5
Dan Guzman 3 mar. 2018 a las 19:25

Esto debería ayudarlo a comenzar a clasificar sobre N registros. N se establece en 3 a continuación.

CREATE TABLE TEST (ID INT)
INSERT INTO TEST
VALUES (1), (2), (3), (4), (5), (6)

WITH T AS (
SELECT 
  ID,
  RANK() OVER (ORDER BY ID) RANK
FROM 
  TEST
)
SELECT 
  ID, 
  (RANK - 1) / 3 GROUP_ID,
  ROW_NUMBER() OVER(PARTITION BY (RANK - 1) / 3 ORDER BY ID) AS ROWNUM
FROM 
  T
GROUP BY 
  ((RANK - 1) / 3), ID
1
nbot 3 mar. 2018 a las 19:32

El siguiente código actualizará la columna CoinRow en el orden Id a 1, 2, 3, 1, 2, 3, .... El valor inicial de Id y los valores faltantes no afectarán la secuencia.

-- Sample data.
declare @Coins as Table ( Id Int, CoinRow Int NULL );
insert into @Coins ( Id ) values
  ( 1 ), ( 2 ), ( 3 ),
  ( 4 ), ( 6 ), ( 7 ),
  ( 10 ), ( 11 ), ( 12 ),
  ( 19 );
select * from @Coins;

-- Update the   CoinRow   column.
with CoinRows as (
  select Id, CoinRow, ( Row_Number() over ( order by Id ) - 1 ) % 3 + 1 as NewCoinRow
    from @Coins )
update CoinRows
  set CoinRow = NewCoinRow;
select * from @Coins;
1
HABO 4 mar. 2018 a las 01:14

Cómo es esto:

UPDATE  Coins
SET     Coin_Row = CASE WHEN coin_SortOrder%3 = 0 THEN 3 ELSE coin_SortOrder%3 END
2
MJH 3 mar. 2018 a las 19:24