0

我知道我可以用我的编程语言做到这一点,但我想尝试在 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?还是他们更简单的方法?

任何帮助表示赞赏..

4

1 回答 1

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 关系的单独表中,这将是一个更好的数据模型(并且更容易查询)。

于 2012-10-25T21:43:16.457 回答