Оператор SQL Firebird с UNION дает тип данных, неизвестный даже при приведении

У меня есть следующий запрос, где в одном из запросов объединения поле должно быть 0, а в другой части оно дает среднее значение из подзапроса. Я должен использовать подзапрос SELECT. Я не могу использовать JOINS, так как это приведет к удвоению записей в наборе результатов (фактический запрос гораздо сложнее):

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

Все поля имеют типы Float в базе данных, но я все еще получаю неизвестный тип данных.

Есть ли способ узнать, какой тип данных AVG(T3.C+T3.E) есть?

Мой обходной путь должен использовать (T1.C*0) as C вместо CAST(0 as FLOAT) as C,

1 ответ

Один из способов - избежать 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);
Другие вопросы по тегам