我有如下表:
SID GRADE SUBJECT
1 C ENG
1 D PHYSICS
1 E CHEMISTRY
2 A BIOLOGY
2 B ENG
3 A MATH
4 B PHYSICS
4 C MATH
4 D ENG
輸出:如果特定 SID 的任何記錄具有 B 級,則僅考慮該行專案,丟棄該特定 SID 的其他行專案。如果特定 SID 的任何記錄沒有 B 級,則輸出該 SID 的所有行專案。
輸出將如下所示:
SID GRADE SUBJECT
1 C ENG
1 D PHYSICS
1 E CHEMISTRY
2 B ENG
3 A MATH
4 B PHYSICS
誰能幫我處理 SQL 查詢?我正在使用 MS SQL Server
uj5u.com熱心網友回復:
第一個選擇獲得您的 B 學生,第二個選擇獲得非 B 學生,并且聯合將兩個選擇結合在一起。
SELECT
SID,
GRADE,
SUBJECT
FROM
YourTable
WHERE
GRADE = 'B'
UNION
SELECT
YourTable.SID,
YourTable.GRADE,
YourTable.SUBJECT
FROM
YourTable
OUTER APPLY (
SELECT SID FROM YourTable WHERE GRADE = 'B'
) BStudent
WHERE
YourTable.GRADE <> 'B' AND
YourTable.SID <> BStudent.SID
uj5u.com熱心網友回復:
您可以將兩個查詢 UNION 在一起,例如:
--Grade B only
select *
from grades
where grade = 'B'
union
--Other people
select *
from grades
where sid not in (select sid from grades where grade = 'B')
order by sid
第一個將僅回傳具有 B 級科目的 B 級人員,而另一個查詢將回傳其他學生。
Db-fiddle 在這里找到
uj5u.com熱心網友回復:
你可以這樣做(結果在這里)
select * from t1 where grade = 'B'
union
select * from t1 where sid not in (select sid from t1 where grade = 'B')
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/476560.html
標籤:sql
