我正在尝试通过链接的SSAS服务器执行SQL查询.初始查询工作正常:
SELECT "Ugly OLAP name" as "Value" FROM OpenQuery( OLAP, 'OLAP Query')
但是,如果我尝试添加:
WHERE "Value" > 0
我收到一个错误
列名称'Value'无效
我有什么想法可能做错了吗?
所以问题在于处理查询元素的顺序与它们的编写顺序不同.根据这个消息来源:
http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
MSSQL中的评估顺序是:
从
上
加入
哪里
通过...分组
HAVING
选择
订购
因此,在WHERE和HAVING子句之后才会处理别名.
这应该工作:
SELECT A.Value FROM ( SELECT "Ugly OLAP name" as "Value" FROM OpenQuery( OLAP, 'OLAP Query') ) AS a WHERE a.Value > 0
并不是Value是一个保留字,问题是它是列别名,而不是列名.通过使其成为内联视图,"Value"成为列名,然后可以在where子句中使用.
您使用"Value"作为列别名,我不认为别名可以出现在where子句中.它只是用于命名返回的列值.您的where子句应该引用原始列名:
SELECT "Ugly OLAP name" as "Value" FROM OpenQuery( OLAP, 'OLAP Query') WHERE "Ugly OLAP name" > 0