У меня есть таблица со следующими столбцами: имя автора, страна, статус.
Author_name country status
-------------------------------------------
1 Author - 1 Country - 1 name remove
2 Author - 2 Country - 2 name done
3 Author - 3 Country - 3 name done
4 Author - 4 Country - 4 name done
5 Author - 5 Country - 5 name done
6 Author - 6 Country - 6 name remove
7 Author - 7 Country - 7 name remove
8 Author - 8 Country - 8 name done
9 Author - 9 Country - 9 name remove
10 Author - 10 Country - 10 name done
Ожидаемая функциональность: при обнаружении «удаления» эта строка должна быть удалена, а строка над ней -быть удаленным.
Если последовательно появляется «удалить», то многие строки сверху должны быть удалены.расположение 'remove' и количество записей не являются постоянными.
После запуска сценария SQL вывод приведенной выше таблицы должен выглядеть следующим образом:
Author_name country status
-------------------------------------------
2 Author - 2 Country - 2 name done
3 Author - 3 Country - 3 name done
10 Author - 10 Country - 10 name done
Надеюсь, вы поняли логику,
Я пытался использовать лаг, курсор и некоторые другие.Теперь я пытаюсь с циклом пока.Пожалуйста, помогите мне с этим.Вот мой последний код.
Моя БД - это SQL Server, и в настоящее время я использую онлайн-компилятор: https://rextester.com/l/sql_server_online_compiler
CREATE Table tblAuthors
(
Author_name nvarchar(50),
country nvarchar(50),
prod varchar(50),
timestamp datetime
)
Declare @Id int
Set @Id = 1
While @Id <= 10
Begin
Insert Into tblAuthors values ('Author - ' + CAST(@Id as nvarchar(10)),
'Country - ' + CAST(@Id as nvarchar(10)) + ' name', 'done', getdate())
Print @Id
Set @Id = @Id + 1
End
update tblAuthors set prod = 'remove' where Author_name = 'Author - 1'
update tblAuthors set prod = 'remove' where Author_name = 'Author - 6'
update tblAuthors set prod = 'remove' where Author_name = 'Author - 7'
update tblAuthors set prod = 'remove' where Author_name = 'Author - 9'
SELECT * FROM tblAuthors
select IDENTITY(int, 1,1) as idnt,* into ##temp_tblAuthors from tblAuthors
select * from ##temp_tblAuthors
DECLARE @intFlag INT = 1
DECLARE @Flag INT = 0
DECLARE @Author_name nvarchar(50)
DECLARE @country nvarchar(50)
DECLARE @prod varchar(50)
DECLARE @idnt INT
select @Flag = count(*) from ##temp_tblAuthors
WHILE (@intFlag <=@Flag)
BEGIN
select
@idnt = idnt
,@Author_name = Author_name
,@country = country
,@prod = prod
from ##temp_tblAuthors where idnt = @intFlag
if @prod = 'remove'
BEGIN
SELECT @intFlag
select
@idnt = idnt
,@Author_name = Author_name
,@country = country
,@prod = prod
from ##temp_tblAuthors where idnt = @intFlag-1
DELETE tblAuthors WHERE
Author_name = @Author_name AND
country = @country AND
prod = @prod
select
@idnt = idnt
,@Author_name = Author_name
,@country = country
,@prod = prod
from ##temp_tblAuthors where idnt = @intFlag
DELETE tblAuthors WHERE
Author_name = @Author_name AND
country = @country AND
prod = @prod
END
SET @intFlag = @intFlag + 1
END
GO
SELECT * FROM tblAuthors