2013-11-26 3 views
0

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

1: cause 
2: employee1 
3: employee2 
4: rating 

Здесь employee2 предоставляет рейтинг employee1 по указанному делу. Мне нужно найти пару сотрудников, которые всегда дают оценку 5 друг другу.

Я новичок в sql и знаю основы этого языка, но я не понимаю, что делать в этой ситуации.

+0

данные примера помогут! –

+0

вы что-то пробовали ???? –

+0

Какая СУБД вы используете? Oracle? Postgres? DB2? –

ответ

0

Попробуйте что-то вроде этого:

Вот SQL Fiddle

--test установки данных:

CREATE TABLE #emptable (cause varchar(20), emp1 varchar(20), emp2 varchar(20), rating int) 
INSERT INTO #emptable (cause, emp1, emp2, rating) VALUES('C1', 'emp A', 'emp B', 5) 
INSERT INTO #emptable (cause, emp1, emp2, rating) VALUES('C1', 'emp B', 'emp A', 5) 
--INSERT INTO #emptable (cause, emp1, emp2, rating) VALUES('C1', 'emp A', 'emp B', 3) 
INSERT INTO #emptable (cause, emp1, emp2, rating) VALUES('C1', 'emp A', 'emp C', 5) 
INSERT INTO #emptable (cause, emp1, emp2, rating) VALUES('C2', 'emp C', 'emp A', 2) 
INSERT INTO #emptable (cause, emp1, emp2, rating) VALUES('C2', 'emp D', 'emp A', 3) 
INSERT INTO #emptable (cause, emp1, emp2, rating) VALUES('C3', 'emp A', 'emp D', 5) 
--INSERT INTO #emptable (cause, emp1, emp2, rating) VALUES('C1', 'emp B', 'emp A', 3) 

--query

SELECT E1.emp1, E1.emp2 
FROM #emptable E1 
INNER JOIN #emptable E2 
    ON E1.emp1 = E2.emp2 
    AND E2.emp1 = E1.emp2 
    AND E1.cause = E2.cause 
GROUP BY E1.emp1, E1.emp2 
HAVING MIN(E1.rating)=5 
AND MIN(E2.rating)=5 
DROP TABLE #emptable 

--results

emp1 emp2 
emp A emp B 
emp B emp A 
+0

Спасибо Mack, но запрос заключается в том, что они должны давать рейтинг 5 каждый раз. , в этом случае они могут дать 3 или 2 раза. – vivek

+0

@ user3036327 см. Ревизию - теперь используйте MIN, чтобы избежать 2 или 3 баллов. – Mack

+0

Спасибо, что мне просто нужно было удалить причину, так как я хотел иметь сотрудника, который помогает друг другу по любой причине (также каждая причина в моем случае различна). Большое спасибо маке. – vivek

-1
SELECT E1.* FROM SAMPLE AS E1, SAMPLE AS E2 WHERE 
E1.RATING = E2.RATING AND 
E1.RATING=5 AND E2.RATING=5 
AND E1.employee1 = E2.employee2 
+0

Это не отфильтровывает сотрудников, которые также дали рейтинги, отличные от 5. –

+0

, вы не просили сделать это в своем вопросе. Так что plz будет ясно с вашими запросами. –

+0

Я не пользователь3036327; и он сказал «всегда». –

Смежные вопросы