2017-02-21 11 views
1
A B C 
1 bob 55 0 
2 bob 55 1 

Мне нужна помощь с моим предложением where. В приведенном выше примере Боб имеет две записи. Я хочу показать только записи, если все записи Боба имеют значение 1 в столбце C. Если одна из записей Боба имеет значение 0, она ничего не должна возвращать Бобу. В настоящее время я только в состоянии заставить его вернуть одну запись, которая имеет значение 1.SQL Где требуется помощь в случае необходимости

существующий запрос

select a, b, c 
from table 
where b = 55 and c = 1 
+0

Так - есть 0 и 1 единственные возможные значения в столбце 'C'? Это может быть «нуль»? Кроме того, может 'A' или' B' когда-либо быть 'null'? И: если у вас две одинаковые строки, с 'bob 55 1', вам нужно вернуть оба из них? (То есть, сохраняйте дубликаты из базовой таблицы, если они существуют?) Или гарантировано, что на входах не будет дубликатов? – mathguy

+0

0 и 1 являются единственными возможными значениями в столбце C. – user3007002

ответ

1

Самый простой способ, вероятно, использовать not exists:

select t.* 
from t 
where not exists (select 1 
        from t t2 
        where t2.a = t.a and t2.c <> 1 
       ); 
+0

Спасибо всем за вашу помощь! – user3007002

0

Попробуйте использовать NOT EXISTS следующим образом:

select a, b, c 
    from table t 
    where t.b = 55 and not exists (select 1 from table t2 
    where t2.b=t.b and t2.c=0) 
0

Вы можете создать дополнительный запрос, который найдет любой записи равны единице. Если это произойдет, вы не включите их.

select a, b, c 
    from table as t 
    where not exists (
     select * 
     from table as t1 
     where t.a = t1.a and IsNull(t1.c, -1) <> 1 
    ) 

Таким образом, это не имеет значения, что различные значения для столбца с может произойти, они будут иметь запись, даже если вы получаете некоторые аннулирует (Только в случае, если вы не знакомы с вашими данными.). Sub-запрос внутри скобки может быть запущен сам по себе, чтобы проверить или посмотреть, нужны ли вам другие критерии.

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

1

Я хотел бы предложить несколько измененного SQL (включен ИНЕКЕ билда Гордона): решение

select t.a, t.b, t.c 
from table t 
where t.b = 55 and t.c = 1 and not exists (select 1 
        from t t2 
        where t2.a = t.a and t2.b = t.b and t2.c = 0 
       ); 

Массимина также работает, предполагая, что столбец С только когда-либо имеет значение 1 или 2.

+0

«значения 1 или 0» Я имел в виду, конечно. – datadevelopr