![](/img/trans.png)
[英]Oracle SQL - Update Set field to value Case When another field equals something
[英]SQL Case when at least one value equals value then set to value
我正在嘗試通過查詢教授學位的不同值來更新表格。 faculty 表有一個 terminal degree 字段(值 Y 或 N)。 教授可以擁有多個學位,但如果至少有一行的最終學位 = Y,我想將該值設置為“Terminal”。 如果只有“N”的值,而沒有“Y”的值,那么我想將終端度數設置為“非終端”
下面是我目前擁有的代碼,但它不適用於擁有超過一個學位(Y 或 N 值)的教授
UPDATE SNP_FACULTY_CENSUS SFC
SET TERMINAL_DEGREE = (
Case
WHEN EXISTS (SELECT DISTINCT(F.TERMINAL_DEGREE)
FROM FACULTY F
left JOIN SNP_FACULTY_CENSUS S
ON F.PERSON_SKEY = S.PERSON_sKEY
)
THEN (SELECT -- USE TERMINAL VALUE FROM FACULTY TABLE
CASE
WHEN F.TERMINAL_DEGREE = 'Y' AND F.TERMINAL_DEGREE = ''--if at least ONE value equals Y
THEN
'Terminal'
WHEN F.TERMINAL_DEGREE = 'Y' -- if all values equal Y
THEN 'Terminal'
WHEN F.TERMINAL_DEGREE = 'N' --if ALL values equal N
THEN
'Not terminal'
ELSE
'Unknown'
END
FROM FACULTY F
left JOIN SNP_FACULTY_CENSUS S
ON F.PERSON_SKEY = S.PERSON_sKEY)
END
)
WHERE SFC.OIR_FALL_TERM = 'Fall 2019'
;
你必須使用不存在,下面的查詢應該有效,因為我沒有樣本數據,我無法測試它:
UPDATE SNP_FACULTY_CENSUS SFC
SET TERMINAL_DEGREE = (
Case
WHEN EXISTS (SELECT DISTINCT F.TERMINAL_DEGREE
FROM FACULTY F
left JOIN SNP_FACULTY_CENSUS S
ON F.PERSON_SKEY = S.PERSON_sKEY
)
THEN (SELECT -- USE TERMINAL VALUE FROM FACULTY TABLE
CASE
WHEN F.TERMINAL_DEGREE = 'Y' --if ONE value equals Y
THEN
'Terminal'
WHEN F.TERMINAL_DEGREE = 'N' and not exists(select 1 from FACULTY fa where F.PERSON_SKEY = fa.PERSON_sKEY and Fa.TERMINAL_DEGREE = 'N')--if ALL values equal N
THEN
'Not terminal'
ELSE
'Unknown'
END
FROM FACULTY F
left JOIN SNP_FACULTY_CENSUS S
ON F.PERSON_SKEY = S.PERSON_sKEY)
END
)
WHERE SFC.OIR_FALL_TERM = 'Fall 2019';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.