1

我有以下查询,其中在一个联合查询中,字段必须为 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

数据库中的所有字段都是浮点类型,但我仍然得到数据类型未知。

有没有办法知道有哪种数据类型AVG(T3.C+T3.E)

我的解决方法是使用(T1.C*0) as C而不是CAST(0 as FLOAT) as C.

4

1 回答 1

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);
于 2017-05-18T10:47:27.867 回答