2008-09-05 4 views
19

연결된 SSAS 서버를 통해 SQL 쿼리를 수행하려고합니다.OpenQuery 결과의 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. ON
  2. FROM
  3. WHERE
  4. 그룹
  5. 가함으로써 가입
  6. 그래서 별명이 WHERE 후 HAVING 절까지 처리되지 않았습니다

BY

  • 순서를 선택합니다.

  • +1

    이 질문에 대한 모든 대답이 없습니까?! –

    답변

    17

    이 작동합니다 :

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

    그것은 그 값이 예약어됩니다 아니다, 문제는 그것이 열 별칭이 아닌 열 이름 점이다. 인라인 뷰로 만들면 "Value"가 열 이름이되고 where 절에서 사용될 수 있습니다.

    0

    오, 버머. 나는 방금 AS FOO를 선택했다. 이 경우에 HAVING 클로스가 필요하지 않습니까?

    SELECT whatever AS value FROM table HAVING value > 1; 
    

    "value"는 사용하지 않습니다. 그러나 확실히, 당신의 문서에서 그것을 찾으십시오!

    6

    "값"을 열 별칭으로 사용하고 있으며 별칭이 where 절에 나타날 수 있다고 생각하지 않습니다. 단순히 반환 된 열 값의 이름을 지정하는 데 사용됩니다. where 절은 원본 열 이름을 참조해야합니다.

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

    GROUP BY 밖으로 나가도록 보증 할 수 있습니다. 좋은 소식은 평범한 오래된 별칭 인 것뿐입니다.