【问题标题】:Multiple tables join and applying case when多表join及应用case when
【发布时间】:2018-05-22 07:17:33
【问题描述】:

我试图在加入多个表时使用短语来更改结果值。

SELECT CASE WHEN CENSUS = '0' THEN 'SP_CENSUS0' END AS SP_RESULT FROM SP
SELECT CASE WHEN CENSUS = '0' THEN 'SR_CENSUS0' END AS SR_RESULT FROM SR

    SP             SR          TARGET
   ------         ------      --------
   CODE           CODE        CODE
   CENSUS         CENSUS

我希望同时加入三个表 TARGET、SP 和 SR SP AND SR 应该做 1:1 映射,希望使用列 CODE 来使用 加入。每个 CENSUS 列可能/可能不会有不同的结果。

我希望这样的结果出现在我的结果中

      SP_RESULT            SR_RESULT
-------------------------------------
 1   (0)SP_CENSUS0      (0)SR_CENSUS0
 2         1                   4
 3         2            (0)SR_CENSUS0
 4         3                   1
 5   (0)SP_CENSUS0             5

我的结果可能有 0,1,2,3,4,5,我只希望结果 0 被更改,这两个表被加入

【问题讨论】:

    标签: sql oracle tibero


    【解决方案1】:

    如果 SR 和 SP 通过 CODE 字段是 1:1,那么 TARGET 的意义何在?

    您可以在case 语句中使用table.field:

    select case when SP.CENSUS = '0' then 'SP_CENSUS0'
        else SP.CENSUS
        end as SP_RESULT,
    
        case when SR.CENSUS = '0' then 'SR_CENSUS0'
        else SR.CENSUS 
        end as SR_RESULT
    FROM SR JOIN SP ON SR.CODE = SP.CODE
    

    另外:注意数据类型,如果 Census 列是数字,则必须在 ELSE 分配中将 CAST 到 VARCHAR。

    【讨论】:

    • 我打算使用 TARGET 表中的其他列。 (我没有在这里写下:()
    猜你喜欢
    • 2021-02-13
    • 2021-06-14
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多