Оператор 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);