Обновить недостающие значения - PullRequest
0 голосов
/ 19 марта 2020

У меня есть набор данных, который выглядит следующим образом

|---------------------|------------------|------------------|
|      RowID          |     UserID       |      Code        |
|---------------------|------------------|------------------|
|       1             |         123      |        0         |
|---------------------|------------------|------------------|
|       2             |         123      |        0         |
|---------------------|------------------|------------------|
|       3             |         123      |        50        |
|---------------------|------------------|------------------|
|       4             |         456      |        0         |
|---------------------|------------------|------------------|
|       5             |         456      |        100       |
|---------------------|------------------|------------------|

Я хотел бы обновить 0 для кода, отличного от 0 для каждого идентификатора пользователя. Может ли кто-нибудь помочь с этим?

Ответы [ 2 ]

4 голосов
/ 19 марта 2020

Одна опция использует обновляемое общее табличное выражение и функции окна:

with cte as (
    select code, max(code) over(partition by userID) max_code
    from mytable
)
update cte set code = max_code where code = 0
1 голос
/ 19 марта 2020

Для этого можно использовать простой подзапрос:

update MyTable set
  /* If its possible that a user might have multiple Codes which are non-zero you adjust the sub-query to return the correct one */
  Code = (select top 1 Code from MyTable T2 where Code != 0 and T2.UserID = MyTable.UserId)
where Code = 0
...