条件字段选择oracle

时间:2012-10-25 21:25:02

标签: sql oracle

我知道我可以用我的编程语言做到这一点,但是我想尝试在SQL中执行此操作,这样我就不必打扰任何前端代码。

我有一个包含三个名称字段的表 - name1,name2,name3。

任何或所有这些字段中都可能存在随机值。

我想要一个返回三个字段的查询,

它将检查name1,name2,name3 - 哪个第一个字段的值都进入first_name, 哪个第二个字段有值进入second_name,然后是third_field。

我可以轻松编写一个CASE-END语句来填充first_name,但是当我编写second_name的逻辑时,它会变得更复杂。

SQL:

SELECT 
  CASE
    WHEN NAME1 IS NOT NULL
    THEN NAME1
    ELSE
      CASE
        WHEN NAME2 IS NOT NULL
        THEN NAME2
        ELSE
          CASE
            WHEN NAME3 IS NOT NULL
            THEN NAME1
            ELSE ''
          END
      END
  END FIRST_NAME
  FROM TABLE_NAME

现在,我该如何处理second_name和third_name?或者他们是一个更容易的方式?

感谢任何帮助..

1 个答案:

答案 0 :(得分:4)

您可能会执行类似

的操作
SELECT coalesce( name1, name2, name3 ) first_name,
       (case when name1 is not null 
             then nvl( name2, name3 )
             when name2 is not null
             then name3
             else null
         end) second_name,
       (case when name1 is not null and
                  name2 is not null
             then name3
             else null
         end) third_name
  FROM your_table

然而,这样做的愿望似乎表明您有一个需要解决的数据模型问题。如果您有三列显然都存储相同的数据,则表未正确规范化。如果将名称存储在与现有表格具有1:n关系的单独表格中,那么这将是一个更好的数据模型(以及更简单的查询)。