#sql #sql-server #tsql #azure-sql-database
#sql #sql-сервер #tsql #azure-sql-database
Вопрос:
У меня есть базовая таблица с миллионом номеров клиентов, всего в одном столбце. Теперь я хочу добавить второй столбец со значениями ‘1’ и ‘0’, если клиенты найдены в другой конкретной таблице.
Базовая таблица:
select relationNr
from Relation
Вторая таблица:
select relationNr
from Contract
where startdate < '01-01-2019'
and enddate is null
and type = 'donor'
Я ожидаю два столбца, первый со всеми номерами отношений, а второй с 1 или 0 if, в зависимости от того, присутствует ли оно во второй таблице или нет.
Комментарии:
1. Пожалуйста, предоставьте примерные данные и ожидаемый результат!
2. Вы запрашиваете несоответствие данных. По крайней мере, используйте триггеры для управления этим новым столбцом.
Ответ №1:
Для этого вы можете использовать внешнее соединение:
select r.relationnr,
case
when c.relationnr is not null then 1
else 0
end as is_present
from relation r
left join (
select relationNr
from Contract
where startdate < '01-01-2019'
and enddate is null
and type = 'donor'
) c on c.relationnr = r.relationnr;
Ответ №2:
Используйте ЛЕВОЕ СОЕДИНЕНИЕ для достижения своего результата:
SELECT
relationNr
,IIF(c.relationnr IS NOT NULL,1,0) is_present
FROM
Relation r
LEFT JOIN Contract c ON r.relationnr = c.relationnr
AND c.startdate < '01-01-2019'
AND c.enddate is null
AND c.type = 'donor'