2014-08-28 4 views
1

У меня есть таблица с текущими значениями:Как получить значение столбца, где условие охватывает более двух строк?

Result of two queries

То, что я хочу, чтобы получить значение projekt где KOD является Greger и Åutte.

На данный момент моя попытка ничего не возвращает. Поскольку условие охватывает более двух строк, я не знаю, как получить projekt, в котором я нуждаюсь.

Требуемая результат будет выглядеть следующим образом:

enter image description here

Я мог бы быть немного груб с просьбой к магии здесь, но я в настоящее время из волшебных очков.

Как получить значение столбца, где условие охватывает более двух строк?

+0

Если я правильно понимаю ваш вопрос, то вы можете использовать ** В пункте **. вот так: 'select projekt from myTable где kod in ('Greger', 'Åutte')' –

+0

Почему downvote, я думаю, что это правильный вопрос и не является конкретным и широким. – doge

+1

По ответам, которые вы получили, я думаю, что downvot может быть, потому что не совсем понятно точный результат, который вы хотите. Добавьте, что вы хотите только проекции, которые имеют как значения kod, так и разные строки ... или добавление ожидаемого набора результатов. Это сделает вопрос лучше;) – Frazz

ответ

1

Используйте это:

SELECT a.projekt 
FROM myTable a 
WHERE EXISTS (
    SELECT b.projekt 
    FROM myTable b 
    WHERE b.projekt=a.projekt AND kod='Greger' 
) AND EXISTS (
    SELECT c.projekt 
    FROM myTable c 
    WHERE c.projekt=a.projekt AND kod='Åutte' 
) 

Другой способ заключается в COUNT совпадающие записи, но вы должны быть уверены, что вы считаете DISTINCT KOD значения:

SELECT projekt 
FROM myTable 
WHERE kod IN ('Greger','Åutte') 
GROUP BY projekt 
HAVING COUNT(DISTINCT kod)=2 

Это может быть упрощена, если вы знаете, что (Projekt, KOD) является UNIQUE или PRIMARY ключ MYTABLE:

SELECT projekt 
FROM myTable 
WHERE kod IN ('Greger','Åutte') 
GROUP BY projekt 
HAVING COUNT(*)=2 

Во всех случаях лучше всего убедиться, что вы имеете индекс (Projekt, KOD), если таблица большая;)

+0

Спасибо, это было то, что я искал. Твои и Алекс отвечают на оба дела. – doge

+0

Да. Просто будьте осторожны, что COUNT может быть сложным. Результаты в этом случае немного зависят от того, если (projekt, kod) UNIQUE или нет. Просто остерегайтесь **, что ** вы считаете. EXISTS является немного более читабельным и надежным, но он может быть менее эффективным. – Frazz

1

Как насчет чего-то подобного?

select 
distinct projekt 
from myTable 
where kod in ('Greger','Åutte') 
group by projekt 
having count(projekt) > 1 
+0

Спасибо, работает. Твой и Фрейз отвечают на оба произведения. – doge

0

Изменения заявление

Select * from myTable where kod = 'Greger' OR kod = 'Åutte' 

или в

Select * from myTable where kod in ('Greger', 'Åutte') 
0

Используйте OR вместо AND

SELECT * FROM myTable WHERE kod = 'Greger' OR kod='Autte' 

Действительного заявление просит ряд, где KOD является Greger и autte для каждой строки, с которой я так как есть только одна колонка.

Если вы считаете более загар двумя условиями для одной колонки. Предложение IN, предложенное в другом ответе, может быть хорошим решением, так как это уменьшает многословие высказывания.

-1

используйте OR, который позволяет выбрать, если один из этого доступного два условия:

SELECT * FROM myTable WHEREkod = 'GREGER' OR kod='AUTTE' 
0

Похоже, вы используете SQL Server, так что вы можете использовать ключевое слово intersect как так:

select * from tbl where projekt in 
(select projekt from tbl where kod = 'Greger' 
intersect 
select projekt from tbl where kod = 'Åutte') 

Intersect возвращает все проекты, которые имеют строки для обеих записей. Затем вы можете выбрать все столбцы из таблицы на основе результата подзапроса.

Demo

0

есть больше чем одна возможность

SELECT DISTINCT projekt FROM users 
WHERE kod IN('Greger','Åutte') 

ИЛИ

SELECT DISTINCT projekt FROM users 
WHERE kod = 'Greger' OR kod = 'Åutte' 
Смежные вопросы