【问题标题】:Postgres CASE statement not working in SQL ServerPostgres CASE 语句在 SQL Server 中不起作用
【发布时间】:2015-10-19 22:04:20
【问题描述】:

我在 postgres(在 PGAdmin 上)中编写了一个查询,我想将它放在 SSMS2012 中用于报告目的,但它似乎不允许 CASE 语句,这是我的查询:

SELECT * 
FROM OPENQUERY (POSTGRESQL,
                'SELECT 
                     Table1 AS Table_1,
                     CASE Table2 
                        WHEN 75887 THEN ''1''
                        WHEN 75888 THEN ''2''
                        WHEN 75889 THEN ''3'' 
                        WHEN 75890 THEN ''4''
                        WHEN 75891 THEN ''5''
                        WHEN 75892 THEN ''6''
                     END AS Table_2,
                     DateTable1 AS DateTime
                 FROM SuperTable1 ')

我得到了错误:

返回链接服务器“POSTGRESQL”的 OLE DB 提供程序“MSDASQL” 消息“不支持请求的转换。”。
消息 7341,第 16 级,状态 2,第 1 行
无法从链接服务器“POSTGRESQL”的 OLE DB 提供程序“MSDASQL”获取列“[MSDASQL].table_2”的当前行值。

我注意到,如果我删除整个 case 语句,则在 PGAdmin 中检索 SELECT 语句中的列中的数据没有问题,并且整个事情(包括 CASE 语句)都可以正常工作。

【问题讨论】:

  • 案例表达,不是案例陈述...
  • 也许你需要做 CASE WHEN Table2 = 75887 THEN ...WHEN WHEN Table2 = ...?
  • Table1 是字段名吗?如果没有,您可能必须像“Table1”一样引用它。另外,我不完全确定 DateTable1 是否应该写为 to_char(DateTable1, ''YYYY-MM-DD HH24:MI:SS'') - 尝试一下
  • table1 是字段名是的,不幸的是写 to_char(DateTable1, ''YYYY-MM-DD HH24:MI:SS'') 没有解决问题,仍然得到同样的错误跨度>
  • 你真的有一个名为Table2的列吗? - 非常奇怪的命名约定

标签: sql sql-server postgresql case


【解决方案1】:

尝试简化查询

运行 4 个单独的查询来确定是哪一个给您带来了问题。 也可以尝试使用1 而不是''1''

SELECT Table1 AS Table_1

SELECT DateTable1 AS DateTime

SELECT 
    CASE Table2 
    WHEN 75887 THEN 1   
    END AS Table_2

SELECT 
    CASE Table2 
    WHEN 75887 THEN ''1''
    END AS Table_2

【讨论】:

  • 我建议你在我的更新中运行简单的查询来确定是给你问题的确切部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 2018-07-23
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多