У меня есть таблица с двумя разными предметами (A & B).Элементы b в основном являются дубликатами и должны быть удалены или переназначены на A. Я пытаюсь реализовать строку вывода, которая говорит мне, что делать.Вот правила:
Во-первых, если таблица содержит только один отдельный элемент, необходимо проверить, является ли он правильным.Если это A, ничего не нужно менять, но если это B, его необходимо переназначить на A.
Во-вторых, если есть 2 элемента, очевидно, что они должны быть переназначены или удалены.Если дата элемента B совпадает с датой элемента A, ее можно удалить.Если дата элемента B не совпадает ни с одной датой элемента A. Она должна быть переназначена.
Вот некоторые примеры данных, в которых я попытался выяснить логику выражения случая:
declare @table table (
item varchar(1),
date date )
insert into @table values ('a' , '2019-01-01')
insert into @table values ('a' , '2019-01-02')
insert into @table values ('a' , '2019-01-03')
insert into @table values ('a' , '2019-01-04')
insert into @table values ('a' , '2019-01-05')
insert into @table values ('a' , '2019-01-06')
insert into @table values ('a' , '2019-01-07')
insert into @table values ('a' , '2019-01-08')
insert into @table values ('a' , '2019-01-09')
insert into @table values ('a' , '2019-01-11')
insert into @table values ('b' , '2019-01-10')
Сначала я попробовал эти операторы case, но они дали мне неправильный вывод для прикрепленного примера:
select case when (select count(distinct item) from @table where item in ('a','b')) <= 1
then case when (select distinct item from @table where item in ('a','b')) = 'a' then 'no action needed!'
else 'reassign to A' end
else 'delete B' end result
Это моя вторая попытка, которую я пытался сделать с моими выражениями case, но на данный момент она не удаласьи мне нужен совет, чтобы он заработал:
select case when (select count(distinct item) from @table where item in ('a','b')) > 1
then case when (select count(*) from @table a join @table b on a.date = b.date
where a.item in ('b') and b.item in ('a')) <> (select count(*) from @table where item in ('b'))
then 'check what overlaps and whats not'
else 'delete all rows from A' end end
case when (select count(distinct item) from @table where item in ('a','b')) =< 1
then case when (select distinct item from @table where item in ('a','b')) <> (select 'a') then 'reassign to A'
else 'no action needed!' end
Что я должен изменить, чтобы он заработал?