Один из способов сделать это - сделать полное внешнее соединение из таблицы для себя, а затем использовать coalesce.
Select
COALESCE(Inside.Id, outside.id) Id,
COALESCE(Inside.date, outside.date) Date,
COALESCE(Inside.location, outside.location) Location
From
prod Inside
FULL OUTER JOIN prod Outside
ON Inside.id = Outside.iD
and Inside.location <> Outside.Location
Where
(Inside.Location = 'in-house'
or
Inside.Location is null)
and
(outside.Location = 'outside'
or
outside.Location is null)
DEMO
Примечание:
Если ваши поля могут быть обнуляемым вы можете использовать саз вместо COALESCE и использовать поле ID, чтобы определить, какие таблицы использовать. Использование даты в качестве примера
CASE WHEN Inside.Id is not null THEN Inside.date ELSE outside.date END date
Как отмечено Демс это также предполагает, что {id, location}
является уникальным.
UPDATE
Так как вы используете SQL Server и {ID, Location} не является уникальным, и вы хотите, чтобы значение даты макс и всегда выбирают в доме над снаружи, то вы можете использовать ROW_NUMBER/WHERE RowNumber = 1
эффективно здесь , заказывая сначала по местоположению, а затем по дате.
WITH cte
AS (SELECT Row_number() OVER (partition BY ID
ORDER BY CASE LOCATION WHEN 'in-house' THEN 0
WHEN 'outside' THEN 1 END,
DATE DESC) rn,
ID,
Date,
Location
FROM prod)
SELECT ID,
Date,
Location
FROM cte
WHERE rn = 1
Demo
Примечание Мы не должны использовать случай заявление, но я хотел отображение быть явным.
Можете ли вы изменить свой вопрос, возможно? Я не думаю, что ясно, какую проблему вы пытаетесь решить. – Dana
Могу ли я попытаться пара-фразу? Вы хотите, чтобы одна запись была возвращена на 'id'? И это должно быть выбрано с 'location = outside', имеющим приоритет над' location = in-house'. И, я полагаю, если есть еще несколько записей для этого 'id', выберите тот, у которого наибольшее значение' date'? * [Также, какой бренд SQL вы используете? MySQL, SQL Server, Oracle? И какой выпуск/версия?] * – MatBailie
Привет, у меня есть доступ к SQL Server. Если есть несколько rec для id, я бы хотел, чтобы максимальное значение даты и всегда выбиралось внутри дома за пределами. Извините, я знаю, что это не ясное объяснение, но вы правильно это понимаете. – grozny