Sql, как добавить идентификатор столбца с условием? - PullRequest
0 голосов
/ 25 сентября 2019

Я работаю на мс SQL-сервере. На самом деле мое требование - мне нужно добавить новый идентификатор поля идентификатора в существующую таблицу с условием, которое должно быть таким, как в таблице ниже. Таблица:

Col1       ID
1            1
1            2
1            3
0            Null
1            4
0            Null

Как это мне нужно, если col1 равен 1, идентификатор должен увеличиваться, а если col1 равен 0, идентификатор должен быть нулевым.Пожалуйста, кто-нибудь может мне помочь в этом ...

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Ваш запрос должен быть похож на ниже:

 update <table_name> set id=1 where Col1=1;
 update <table_name> set id=null where Col1=0;
1 голос
/ 25 сентября 2019

Вам нужен столбец заказа для ваших данных.Позвольте мне предположить, что у вас есть один.

Сначала добавьте новый столбец:

alter table t add column id int;

Примечание: id - это действительно плохое имя для столбца, который можетбыть null.Тогда:

with toupdate as (
      select t.*,
             row_number() over (partition by col1 order by <ordering col>) as seqnum
      from t
     )
update toupdate
    set id = (case when col1 = 1 then seqnum end);

Строго говоря, вам не нужно обновлять значения при col1 = 0, потому что по умолчанию установлено значение NULL.Однако, если вам нужно другое значение, я пропускаю where col1 = 1.

1 голос
/ 25 сентября 2019

Вы можете имитировать столбец частичной идентификации, но вы не сможете включить фактический столбец IDENTITY в таблицу, которая работает условно.

Если вам просто нужнообновить новый столбец с инкрементным значением, вы можете просто использовать ROW_NUMBER() над отфильтрованным SELECT:

;WITH CTE AS
(
    SELECT
        T.Col1,
        T.ID,
        GeneratedID = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -- Determine your order here
    FROM
        YourTable AS T
    WHERE
        T.Col1 IS NOT NULL
)
UPDATE C SET
    ID = C.GeneratedID
FROM
    CTE AS C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...