2017-05-18 3 views
1

次のクエリを使用しています。ユニオンクエリの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

のFirebirdのバージョンは何、および何であるデータベースの方言(1または3)? –

+0

Firebird 1.5の方言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); 
関連する問題