更新/选择连续模式的行

问题描述 投票:0回答:4

如何更新表中的列以遵循特定模式?目前我的DesiredResultAfterUpdate是空的,我想设置它,以便ID 1,2,3为1,2,3。那么下一组ID(ID4,5,6和7,8,9等等)将是1,2,3?

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

到目前为止我试过了

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

哪个只适用于每个第3项......(令人震惊)

sql-server tsql
4个回答
5
投票

我认为这会做你想要的,使用你的UPDATE查询作为例子:

UPDATE coins
SET coin_Row = (coin_SortOrder-1) % 3 + 1;

2
投票

这个怎么样:

UPDATE  Coins
SET     Coin_Row = CASE WHEN coin_SortOrder%3 = 0 THEN 3 ELSE coin_SortOrder%3 END

1
投票

这应该让你开始排名N记录。 N设置为3以下。

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
投票

以下代码将CoinRow中的Id列更新为1,2,3,1,2,3,.... Id的起始值和缺失值不会影响序列。

-- 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;
© www.soinside.com 2019 - 2024. All rights reserved.