2013-11-22 4 views
-1

Нужна помощь с запросом sql.SQL-запрос, возвращающий только некоторые строки

Таблица:

пользователя     день               тип   значение
Джон   Понедельник чище 0
Джон   Понедельник очиститель 1
питер   Понедельник очиститель 1
знак   понедельник уборщик 1
марка   понедельника уборщик 0

Я хочу, чтобы запрос, чтобы вернуть те строки, которые имеют значение поля> 0, но если есть строка, как день пользователя и тип со значением 0 не возвращаются ни одна строки , В этом случае возвращается только строка «peter monday cleaner 1», потому что есть «очиститель понедельника понедельника» со значением 0 и 1 и отметкой.

Благодаря

+4

Посмотрим SQL-запрос, который вы использовали – Andy

ответ

0

Из того, что я поняли из вашего описания требований, это необходимый вам запрос.

select * from table a where a.value>0 
// This returns all rows that have values equal to 1. In your case 
     john monday cleaner 1 
     peter monday cleaner 1 
     mark monday cleaner 1 


    and a.user not in 
    (select b.user from table b where b.value=0) 

// This would check that the users in the above 3 rows do not have any rows in the 
    result of the select with value =0 

     john monday cleaner 0 
     mark monday cleaner 0 

//Here it has 2 rows with value = 0 and "and a.user not in" would esnure that from 
//the first 3 rows, only those users are selected who are not fetched in the 2 rows 
//given above. 

Итак, когда вы запустите запрос

select * from table a where a.value>0 
and a.user not in 
(select b.user from table b where b.value=0) 

peter monday cleaner 1 // Result. 

Я думаю, вот именно то, что и нужно.

+0

@ user3022110 изменен мой запрос. попробуй это сейчас. – Adarsh

+0

говорил слишком рано, он работает только для первого матча. Если существует несколько строк с тем же условием, поля user day и type равны 0 и 1 как значения, он показывает строку со значением 1 – user3022110

+0

Можете ли вы обновить вопрос такими строками. – Adarsh

1

Попробуйте это:

SELECT * FROM Table as a WHERE a.value > 0 AND EXISTS(SELECT 1 FROM Table as b WHERE b.user=a.user AND b.value=0) 

Если вы хотите ту же строку с разными номерами, чтобы только показать, как только вы могли бы использовать:

SELECT DISTINCT a.user, a.day, a.type FROM Table as a WHERE a.value > 0 AND EXISTS(SELECT 1 FROM Table as b WHERE b.user=a.user AND b.value=0) 
+0

Не должен ли он быть? Он только хочет отображать строки со значением> 0, если строк нет со значением = 0 – Adarsh

+0

Я понял, что ему нужны только строки, которые также имеют версию со значением 0 – Perry

+0

Это: «SELECT * FROM Table as WHERE a.value > 0 И СУЩЕСТВУЮЩИЕ (ВЫБОР 1 ОТ Таблица как b WHERE b.user = a.user AND b.value = 0) "показывает" john monday cleaner 1 "и" peter mononday cleaner 1 "идея должна возвращать только" peter Monday очиститель 1 " – user3022110

0
select _user,_day,_type,MAX(_Value) 
    from #tmp 
    GROUP BY _user,_day,_type 
    having COUNT(*) = 1 
Смежные вопросы