sql - 从 PostgreSQL 到 SQL Server 的带有 bool 值的大小写表达式

标签 sql sql-server case where-clause

我正在将查询从 PostgreSQL 转换为 SQL Server。我没有在 PostgreSQL 中编写查询,就我的知识而言,它相当复杂,所以我不理解它的每一个部分。

据我了解:我们试图从 p_policy 中找到最大版本,当 Insurancestatus = 7 或 14/transactiontype = CAN 时,我们比较两个日期(其格式为 BIG INT)。

这是 PG 查询:

SELECT * 
FROM BLABLABLA 
WHERE
pol.vnumber =  (
                  SELECT MAX(pol1.vnumber)
                  FROM p_policy pol1
                  AND ( CASE WHEN   pol1.insurancestatus IN (7,14)  
                                 or pol1.transactiontype IN ('CAN')
                                -- ('CAN','RCA')
                             THEN pol1.veffectivedate = pol1.vexpirydate
                             ELSE pol1.veffectivedate <> pol1.vexpirydate
                             END
                       )
AND pol1.vrecordstatus NOT IN (30,254) 
etc.
  1. 我习惯使用 where 语句将其与值进行比较。我从 Case 语句中了解到我们将有一个 bool 值,但仍然必须将其与某些东西进行比较?

  2. 无论如何,主要目的是让它在 SQL 中工作,但我相信 SQL 无法读取 THEN 是比较的 CASE 语句。

这是我尝试过的:

SELECT * 
FROM BLABLABLA 
WHERE pol.vnumber =  
            (
              SELECT MAX(pol1.vnumber)
              FROM p_policy pol1
            
              WHERE sbuid = 4019
              

              AND ( CASE WHEN   pol1.insurancestatus IN (7,14)  
                             or pol1.transactiontype IN ('CAN')
                         THEN   CASE  
                                    WHEN pol1.veffectivedate = pol1.vexpirydate THEN 1
                                    WHEN pol1.veffectivedate <> pol1.vexpirydate THEN 0
                                 END
                    END
                   )

AND pol1.vrecordstatus NOT IN (30,254) 
etc. 

然后我从 SQL Server 收到此错误(直接是当前代码的最后一行 - 所以在 double case 语句之后)

Msg 4145, Level 15, State 1, Line 55
An expression of non-boolean type specified in a context where a condition is expected, near 'AND'.

谢谢!如果不清楚请告诉我

最佳答案

我认为你想要 bool 逻辑。 CASE 表达式将翻译为:

(
    (
        (pol1.insurancestatus IN (7,14) OR  pol1.transactiontype = 'CAN')
        AND pol1.veffectivedate = pol1.vexpirydate
    ) OR (
        NOT (pol1.insurancestatus IN (7,14) OR pol1.transactiontype = 'CAN')
        AND pol1.veffectivedate <> pol1.vexpirydate
    )
)

关于sql - 从 PostgreSQL 到 SQL Server 的带有 bool 值的大小写表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64827914/

相关文章:

mysql - 在 sql 查询中使用命名空间

sql - sys.columns.max_length 的替代方案

sql - 如何使用 mssql 获取每月每一天的值(value)

sql - 大日期范围内的最小/最大日期值取决于值

vbscript - 使用 ChassisType 选择案例的多个条件

PHP - 以与调用相同的顺序返回 mysql 行

sql - 需要 MDX 查询总计数

c# - Entity Framework MySQL DbContext 无法连接

sql - Postgres 截断 CASE 语句列

php - Mysql 2跨 TableView 不将1=1关系转化为一个 View