如何解决SQL大小写,当至少一个值等于值然后设置为值
我正在尝试通过查询教授学位的不同值来更新表格。教职员工表具有终极学位字段(值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';
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。