postgresql - 结合比较

标签 postgresql coalesce

我正在尝试为我的 postgres SQL 查询简化一些嵌套 CASE WHEN 逻辑。有人告诉我COALESCE可以帮助。但如果前一个为 NULLCOALESCE 似乎有利于使用其提供的下一个值,不一定是比较。

例如,我的逻辑是级联检查。我试图复制的 excel 逻辑如下所示:

=IF(W3="X",
    IF(
        ISERROR(
            INDEX(
                'LOOKUP A'!$L:$L,MATCH($AC3,'LOOKUP A'!$J:$J,0)
            )   
       ),
       'LOOKUP A'!$L$2,
        INDEX(
            'LOOKUP A'!$L:$L,MATCH($AC3,'CSR Product City'!$J:$J,0)
        )
    ), IFERROR(

        /*
            If Not LOOKUP B
                Then LOOKUP C
                    Then LOOKUP D
        */
        INDEX(
            'LOOKUP B'!$I:$I,MATCH($Y3,'LOOKUP B'!$P:$P,0)
        ),
        IFERROR(
            INDEX(
                'LOOKUP C'!$H:$H,MATCH($Z3,'LOOKUP C'!$O:$O,0)
            ),
            IFERROR(
                INDEX(
                    LOOKUP D!$G:$G,MATCH($S3,LOOKUP D!$A:$A,0)
                ),
                LOOKUP D!$G$2
            )
        )
    )
)

这在 SQL 中是这样出现的。我想使用 COALESCE,但我不确定在这种情况下如何使用,因为我看不到如何执行 IF a.val == b.val THEN 逻辑:

SELECT 
  (CASE
    WHEN a.price = b.price THEN 
      (CASE
        WHEN a.city = b.city THEN 'match!'
          ...
      )
    ELSE 
      ...

  END) as test  

最佳答案

你只需要在 false 比较时 then null,例如:

t=# SELECT coalesce(
  case when 1=2 then 'match1' else null end
, case when 2=3 then 'match2' else null end
,case when 2=2 then 'match3' else null end
);
 coalesce
----------
 match3
(1 row)

关于postgresql - 结合比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47744904/

相关文章:

php - COALESCE 不适用于 CodeIgniter

MySQL - 使用 COALESCE 与 DATE_ADD 和 DATE_SUB 获取下一个/上一个记录

postgresql - 在 POSTGRESQL 中使用带有 INSERT 语句的 WITH 子句

java - 如果我们使用@OneToMany注释,我们是否必须在数据库中本地定义一对多关系

mysql - 我的 pg_dump 文件去哪里了?

ruby-on-rails - 在 Rails 中将列数据类型从 bool 值更改为整数

postgresql - Sequelize : joining table on a subquery

MySQL:使用 COALESCE 创建多个变量

sql - 使用 ISNULL 与使用 COALESCE 来检查特定条件?

mysql - 如何在 MySQL 中使用 Coalesce