Вставить данные в таблицу SQL Server на основе определенных условий - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть приведенная ниже таблица с данными

ID          Value                             Available
29000       Data1                               1
29000       Data2                               0
29001       Data1                               1
29002       Insert                              0
29002       Data1                               1
29003       Data2                               0

Итак, в основном у меня есть группа идентификаторов, и в зависимости от того, присутствуют ли в этой группе данные Data1, мне нужно вставить еще одну строку в таблицу со значениемВставьте и укажите любое доступное значение для Data1

Конечный результат, которого я хочу

ID          Value                             Available
29000       Data1                               1
29000       Data2                               0
29000       Insert                              1
29001       Data1                               1
29001       Insert                              1
29002       Data1                               0
29002       Insert                              0 --29002 will be skipped since it already has Insert along with Data1
29003       Data2                               0  
29003       Data3                               0  --29003 will be skipped since there was no Data1 in that grouping

Может кто-нибудь подсказать, как мне этого добиться.

Спасибо

Ответы [ 2 ]

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

Хммм.,,дополнительные строки:

select id, 'Insert' as value, max(available) as available
from t
group by id
having sum(case when value = 'Insert' then 1 else 0 end) = 0;  -- no insert already

Вы можете свести данные вместе с union all:

select id, value, available
from t
union all
select id, 'Insert' as value, max(available) as available
from t
group by id
having sum(case when value = 'Insert' then 1 else 0 end) = 0  -- no insert already
order by id;
0 голосов
/ 19 сентября 2019

Вы можете попробовать использовать подзапрос и объединить все:

select *
from table1
union all
select t1.ID, 'Insert', t1.Available
from table1 t1
where t1.Value = 'Data1'
and not exists
(
select 1
from table1 t2
where t2.ID = t1.ID
and t2.Value = 'Insert'
)
order by ID, Value, Available
...