#sql-server #sql-server-2008
#sql-сервер #sql-server-2008
Вопрос:
Добрый день, я пытаюсь обновить свою таблицу. Потому что на моем веб-сайте была ошибка (ошибки). сначала, пожалуйста, проверьте мой стол. (Penilaian_Header)
IdPenilaian | KodePenilaian | Nip | PositionCode | Total
1613 ----- 1603405 P028 0
1618 ----- 1602999 P028 0
1641 PE0001568 603060 P040 35
1640 PE0001567 1411862 P007 35
как вы можете видеть. Есть две KodePenilaian
пустые строки. Так есть ли шанс заполнить его? таким образом, результат будет таким.
IdPenilaian | KodePenilaian | Nip | PositionCode | Total
1613 PE0001570 1603405 P028 0
1618 PE0001569 1602999 P028 0
1641 PE0001568 603060 P040 35
1640 PE0001567 1411862 P007 35
Вот как я генерирую KodePenilaian
select case
when right(max(KodePenilaian),7) is null then 'PE0000001'
else ('PE' RIGHT('0000000' cast(right(max(KodePenilaian),7) 1 as nvarchar),7))
end KodePenilaian from Penilaian_Header
и вот результат, когда я его запускаю
KodePenilaian
PE0001569
Спасибо, извините за мой плохой английский.
Ответ №1:
На самом деле не привык к sql server 2008 Попробуйте что-то вроде этого:
update Penilaian_Header pen
set pen.KodePenilaian =
(select case
when right(max(newKode.KodePenilaian),7) is null then 'PE0000001'
else ('PE' RIGHT('0000000' cast(right(max(newKode.KodePenilaian),7) 1 as nvarchar),7))
end KodePenilaian
from Penilaian_Header newKode)
where pen.KodePenilain = NULL
если -----
NULL
в вашей таблице
Комментарии:
1. его рабочее спасибо. Просто нужно удалить
pen
(псевдоним)
Ответ №2:
Вы можете попробовать этот способ…
;WITH cte
AS (SELECT *,
MAX(CONVERT(int, REPLACE(KodePenilaian, 'PE000', ''))) OVER () AS MaxNum,
ROW_NUMBER() OVER (ORDER BY kodePenilaian) AS rn
FROM YourTable)
UPDATE cte SET KodePenilaian = concat('PE000', maxnum rn)
WHERE KodePenilaian IS NULL
Ваша таблица
create table YourTable (
IdPenilaian int, KodePenilaian varchar(20), Nip int, PositionCode varchar(10), Total INT)
insert into YourTable
(IdPenilaian , KodePenilaian , Nip , PositionCode , Total) values
( 1613 , NULL , 1603405 ,'P028', 0 )
,( 1618 , NULL , 1602999 ,'P028', 0 )
,( 1641 , 'PE0001568' , 603060 ,'P040', 35 )
,( 1640 , 'PE0001567' , 1411862 ,'P007', 35 )