【问题标题】:SQL Case when at least one value equals value then set to valueSQL Case 当至少一个值等于 value 然后设置为 value
【发布时间】:2020-12-28 05:50:52
【问题描述】:

我正在尝试通过查询教授学位的不同值来更新表。教师表有一个最终学位字段(值 Y 或 N)。教授可以拥有多个学位,但如果至少存在一行他们的最终学位 = Y,我想将值设置为“最终”。如果只有“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'
    ;

【问题讨论】:

    标签: sql join sql-update case


    【解决方案1】:

    你必须使用不存在,下面的查询应该可以工作,因为我没有样本数据,我无法测试它:

    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';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 2015-02-18
      相关资源
      最近更新 更多