根据oracle中的另一个列字段值返回列名

时间:2014-02-17 07:01:39

标签: sql oracle

我写了这样的代码:

SELECT
C.*,
CASE
    WHEN C.COST_CENTRE_NAME IS NOT NULL THEN 'YES'
    WHEN C.GL_CODE IS NOT NULL THEN 'YES'
    WHEN C.MATERIAL_CODE IS NOT NULL THEN 'YES'
ELSE
    'NO' END AS DEPENDS_OTHER
FROM
OYSTER3.CAT_RULE_MV C

我想要添加另一个名为DEPENDS_ON的列,其中此列的列值将取决于DEPENDS_OTHER的“是”或“否”值。如果DEPEND_OTHER列值为YES,那么它应该返回DEPENDS_OTHER列下它为YES的列名。我在下面给出一个例子:

id  COST_CENTRE_NAME    GL_CODE MATERIAL_CODE   depends_other   depend_on
1         a                                          yes        COST_CENTRE_NAME                  
2                                                    no
3                         123                        yes          GL_CODE
4                                   a2               yes         MATERIAL_CODE
5                                                     no

2 个答案:

答案 0 :(得分:0)

重复你已经开始的事情:

select c.*
      ,case
          when c.cost_centre_name is not null then
           'YES'
          when c.gl_code is not null then
           'YES'
          when c.material_code is not null then
           'YES'
          else
           'NO'
       end as depends_other
      ,case
          when c.cost_centre_name is not null then
           'COST_CENTRE_NAME'
          when c.gl_code is not null then
           'GL_CODE'
          when c.material_code is not null then
           'MATERIAL_CODE'
          else
           null
       end as depends_on
  from oyster3.cat_rule_mv c

答案 1 :(得分:0)

尝试这个

SELECT
C.*,
CASE
    WHEN C.COST_CENTRE_NAME IS NOT NULL THEN 'YES'
    WHEN C.GL_CODE IS NOT NULL THEN 'YES'
    WHEN C.MATERIAL_CODE IS NOT NULL THEN 'YES'
ELSE
    'NO' END AS DEPENDS_OTHER,
CASE
    WHEN C.COST_CENTRE_NAME IS NOT NULL THEN 'COST_CENTRE_NAME'
    WHEN C.GL_CODE IS NOT NULL THEN 'GL_CODE'
    WHEN C.MATERIAL_CODE IS NOT NULL THEN 'MATERIAL_CODE'
ELSE
    ' ' END AS DEPENDS_ON

FROM
OYSTER3.CAT_RULE_MV C