[英]How to lookup all rows in an SQL database that have a certain Boolean column value of true in asp.net?
[英]SQL Challenge - Display N (1, X or All) rows with a certain column value
這是一個早晨的挑戰:您有一個包含這樣的行的表:
=> select * from candidates;
id | name
----+----------
1 | JOhn Doe
2 | Melinda
3 | Bill
4 | Jane
(4 rows)
=> select * from evaluation order by id;
id | score | reason
----+-------+--------------------------------------
1 | RED | Clueless!
1 | AMBER | Came in dirty jeans
2 | GREEN | Competenet and experienced
2 | AMBER | Was chewing a gum
3 | AMBER | No experience in the industry sector
3 | AMBER | Has knowledge gaps
(6 rows)
約翰有紅色,梅林達有綠色和琥珀色,比爾只有琥珀色,而簡還沒有接受采訪。
您的任務(應該選擇接受)是生成一個查詢,該查詢顯示結果以供Boss批准。 老板喜歡將結果呈現為:
游戲規則:
我自己的答案與小組思維相符:
SELECT *
FROM evaluation e1
NATURAL JOIN candidates
WHERE score = 'GREEN'
OR ( score IN ( 'RED', 'AMBER' )
AND NOT EXISTS (SELECT 1
FROM evaluation e2
WHERE e1.id = e2.id
AND score = 'GREEN') )
UNION
SELECT id,
'GREY' AS score,
'Not yet evaluated' AS reason,
name
FROM candidates
WHERE id NOT IN (SELECT id
FROM evaluation)
ORDER BY 1,
2 DESC
以下是過渡的SQL-92:
SELECT c.name, e.*
FROM candidates AS c
JOIN (
SELECT *
FROM evaluation
WHERE score = 'GREEN'
UNION
SELECT *
FROM evaluation AS e1
WHERE score IN ('AMBER', 'RED')
AND NOT EXISTS (
SELECT *
FROM evaluation AS e2
WHERE e2.id = e1.id
AND e2.score = 'GREEN'
)
) AS e
ON c.id = e.id
UNION
SELECT c.name, c.id, 'GREY', '(not interviewed)'
FROM candidates AS c
WHERE NOT EXISTS (
SELECT *
FROM evaluation AS e
WHERE e.id = c.id
)
ORDER BY id, score DESC;
備用(中級SQL-92):
SELECT c.name, e.id, e.score, e.reason
FROM candidates AS c
JOIN (
SELECT *
FROM evaluation
EXCEPT
SELECT *
FROM evaluation
WHERE score IN ('AMBER', 'RED')
AND id IN ( SELECT id FROM evaluation WHERE score = 'GREEN' )
) AS e
ON c.id = e.id
UNION
SELECT name, id, 'GREY' AS score, '(not interviewed)' AS reason
FROM candidates
WHERE id NOT IN ( SELECT id FROM evaluation )
ORDER BY id, score DESC;
SELECT
c.id AS id
, c.name AS name
, COALESCE(e.score, 'GREY') AS score
, e.reason AS reason
FROM
candidates c
LEFT JOIN
evaluation e
ON e.id = c.id
WHERE
e.score = 'GREEN'
OR
NOT EXISTS
( SELECT *
FROM evaluation ee
WHERE ee.id = c.id
AND ee.score = 'GREEN'
)
ORDER BY
id ASC
, score DESC
SELECT A.ID
, A.NAME
, B.SCORE
, B.REASON
FROM CANDIDATES A
LEFT JOIN EVALUATION B
ON A.ID = B.ID
WHERE B.SCORE = 'GREEN'
UNION
SELECT A.ID
, A.NAME
, COALESCE(B.SCORE,'GREY')
, B.REASON
FROM CANDIDATES A
LEFT JOIN EVALUATION B
ON A.ID = B.ID
WHERE A.ID NOT IN (SELECT ID FROM EVALUATION WHERE SCORE = 'GREEN')
ORDER BY ID, SCORE DESC;
SELECT c.id,
c.name,
nvl(e.score, 'GREY'),
nvl(e.reason, 'Not yet interviewed')
FROM candidates c, evaluation e
where c.id = e.id(+)
and ((e.score = 'GREEN') or
(e.score in ('RED', 'AMBER') and not exists
(select null
from evaluation e2
where e2.id = e.id
and e2.score = 'GREEN')) or e.score is null)
order by c.id, e.score desc;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.