在 SELECT 中检查 3 列
Posted
技术标签:
【中文标题】在 SELECT 中检查 3 列【英文标题】:Check 3 columns against each other in SELECT 【发布时间】:2021-03-29 15:40:09 【问题描述】:我有一个包含 3 列的 SELECT
语句,并希望从中计算第四列。
-
如果 Column1 有值,那么 Column4 = Column1
如果不是1.且Column2有值,那么Column4 = Column2
如果不是2.且Column3有值,那么Column4 = Column3
如果不是 3. NULL
基本上,如果找到一个值,则从 Column1 到 Column2 查找,然后将第一个值放入 Column4。
我可以很容易地用 2 列做到这一点:
SELECT
CASE
WHEN (Column1 IS NOT NULL AND Column1 <> '')
THEN Column1
ELSE Column2
END 'Column4'
但我不知道如何将Column3
合并到该逻辑中。唯一认为我现在能想到的是将结果存储为 temptable 或 view,然后再做一个 SELECT
将找到的值与 Column3
进行比较。
重要提示:所有 3 列都可以包含字符串、NULL、' ' 或 '' 的所有可能组合
【问题讨论】:
"重要提示:所有 3 列都可以包含所有可能的字符串组合,NULL
、'
' 或 ''
" 那么我个人会解决这个问题数据模型也不允许在您的数据中使用零长度字符串(以及 UPDATE
现有的 NULL
)。
【参考方案1】:
SELECT COALESCE(NULLIF(Column1, ''), NULLIF(Column2, ''), NULLIF(Column3, ''), NULL) AS Column4...
COALESCE 按顺序计算参数并返回最初不计算为 NULL 的第一个表达式的当前值。
NULLIF 如果两个指定的表达式相等,则返回空值。
【讨论】:
【参考方案2】:您可以使用COALESCE
SELECT COALESCE(Column1, Column2, Column3) AS Column4
更新处理''
SELECT COALESCE(NULLIF(Column1, ''), NULLIF(Column2, ''), NULLIF(Column3, '')) AS Column4
【讨论】:
以上是关于在 SELECT 中检查 3 列的主要内容,如果未能解决你的问题,请参考以下文章