2017-02-21 7 views
0

Я думал, что это будет довольно легко, но по какой-то причине я не могу обернуть вокруг себя. Может быть, я устал. Во всяком случае, я хочу, чтобы вернуть значение политики, которая имеет код состояния 1 и 4. У меня есть простой запрос:Возвращаемые значения, которые зависят от значения из другого столбца

select policiesid, eDeliveryStatusCd 
from UserPolicyHistory 
where PoliciesID is not null 
and eDeliveryStatusCd in (1,4) 
order by policiesid 

Результаты: enter image description here

См подсвеченный policiesid из 10241? Я хочу, чтобы только те возвращались, потому что у него есть edeliverystatuscd из 1 и 4. Поэтому я хочу, чтобы возвращался только код политики, который имеет код состояния 1 и 4, игнорируя остальные. Я думал, это должно быть довольно просто. Я не знаю, почему, но я не могу понять это сегодня. Любая помощь приветствуется!

ответ

1

использованием exists():

select policiesid, eDeliveryStatusCd 
from UserPolicyHistory as t 
where PoliciesID is not null 
    and eDeliveryStatusCd in (1,4) 
    and exists (
    select 1 
    from UserPolicyHistory as i 
    where i.policiesid = t.policiesid 
     and i.eDeliveryStatusCd in (1,4) 
     and i.eDeliveryStatusCd <> t.eDeliveryStatusCd 
) 
order by policiesid 
+0

Мне нравится этот! Благодаря! – Lisbon

+0

@Lisbon Happy, чтобы помочь! – SqlZim

2

Просто добавьте group by и having:

select policiesid 
from UserPolicyHistory 
where PoliciesID is not null and eDeliveryStatusCd in (1, 4) 
group by policiesid 
having count(distinct eDeliveryStatusCd) = 2; 
+0

Это делает предположение о том, что существует уникальность на policiesid и eDeliveryStatusCd. – MikeS

+0

@MikeS. , , Нет, на самом деле, это не делает этого предположения. Знаете ли вы, что означает 'count (distinct)' does? –

+0

Извините, пропустил эту часть sql. – MikeS

1

Другой ответ работает, если таблица является уникальным на policiesid, eDeliveryStatusCd. Если бы не попробовать:

select policiesid, count(*) 
from (select distinct policiesid, eDeliveryStatusCd 
    from UserPolicyHistory uph1 
    where PoliciesID is not null 
    and eDeliveryStatusCd in (1,4)) 
having count(*) > 2 
Смежные вопросы