2017-05-18 12 views
1

유니온 쿼리 중 하나에서 필드가 0이어야하고 다른 부분에서 하위 쿼리의 평균을 제공하는 다음 쿼리가 있습니다. SELECT 하위 쿼리를 사용해야합니다. 이 결과 집합의 레코드를 두 배로 얻을 것 나는 사용할 수 없습니다 조인 (실제 쿼리는 훨씬 더 복잡하다) :UNION을 사용하는 Firebird SQL 문은 캐스팅을해도 알 수없는 데이터 유형을 제공합니다.

SELECT A,B, CAST(0 as FLOAT) as C 
FROM TABLE1 
WHERE CONDITION=0 
UNION 
SELECT T1.A, T1.B, (SELECT AVG(T3.C+T3.E) FROM T3 WHERE T3.A = T1.A) as C 
FROM TABLE1 T1 
WHERE T1.CONDITION=1 

모든 필드는 데이터베이스의 플로트 타입,하지만 난 여전히 데이터 유형을 알 수.

AVG(T3.C+T3.E)의 데이터 유형을 알 수있는 방법이 있습니까?

제 해결 방법은 CAST(0 as FLOAT) as C 대신 (T1.C*0) as C을 사용하는 것입니다.

+0

파이어 버드의 버전은 무엇과 무엇 데이터베이스의 방언 (1 또는 3)? –

+0

Firebird 1.5 dialect 3 –

+0

오류는 무엇입니까? –

답변

2

한 가지 방법은 모든 union을 방지하는 것입니다 :

SELECT A, B, 
     (CASE WHEN CONDITION = 0 THEN CAST(0 as FLOAT) 
      ELSE (SELECT AVG(T3.C+T3.E) FROM T3 WHERE T3.A = T1.A) 
     END) as C 
FROM TABLE1 
WHERE CONDITION IN (0, 1);