【问题标题】:"Invalid column name" error on SQL statement from OpenQuery resultsOpenQuery 结果中的 SQL 语句出现“无效的列名”错误
【发布时间】:2010-09-07 23:06:53
【问题描述】:

我正在尝试通过链接的 SSAS 服务器执行 SQL 查询。初始查询工作正常:

SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery( OLAP, 'OLAP Query')

但如果我尝试添加:

WHERE "Value" > 0

我收到一个错误

列名“值”无效

任何想法我可能做错了什么?


所以问题是查询元素的处理顺序与它们的写入顺序不同。根据这个来源:

http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx

MSSQL中的求值顺序是:

  1. 来自
  2. 开启
  3. 加入
  4. 在哪里
  5. 分组依据
  6. 选择
  7. 订购人

所以直到 WHERE 和 HAVING 子句之后才处理别名。

【问题讨论】:

  • 这个问题的所有非答案都是怎么回事!?

标签: sql sql-server


【解决方案1】:

这应该可行:

SELECT A.Value
FROM (
SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery( OLAP, 'OLAP Query')
) AS a
WHERE a.Value > 0

不是 Value 是保留字,问题是它是列别名,而不是列名。通过使其成为内联视图,“Value”成为列名,然后可以在 where 子句中使用。

【讨论】:

    【解决方案2】:

    您使用“Value”作为列别名,我认为别名不能出现在 where 子句中。它只是用来命名返回的列值。您的 where 子句应引用原始列名:

    SELECT "Ugly OLAP name" as "Value" 
    FROM OpenQuery( OLAP, 'OLAP Query')
    WHERE "Ugly OLAP name" > 0
    

    【讨论】:

      【解决方案3】:

      哦,真可惜。我刚刚看到,你选择 AS FOO。在这种情况下你不需要 HAVING 子句吗?

      SELECT whatever AS value FROM table HAVING value > 1;
      

      我仍然不会使用“价值”。但可以肯定的是,请在您的文档中查找!

      【讨论】:

        【解决方案4】:

        我可以保证将其排除在 GROUP BY 之外。好消息是,作为一个普通的旧选定别名,它工作得很好。

        【讨论】:

          猜你喜欢
          • 2021-04-14
          • 2015-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-21
          相关资源
          最近更新 更多