我知道我可以用我的编程语言做到这一点,但是我想尝试在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?或者他们是一个更容易的方式?
感谢任何帮助..
答案 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关系的单独表格中,那么这将是一个更好的数据模型(以及更简单的查询)。