2016-12-30 32 views
-2

我很确定这是应用正确的别名的问题,我只是不确定我要出错的位置。本身从嵌套子查询联合中选择

Select Z.DesiredResult1, etc... 
from (
    Select C.columns 
     from (
     Select B.columns 
      from (
       Select A.columns 
       from (Subquery) as A 
      ) as B 
     ) as C 
    Where C.condition = 1 
    UNION 
    Select F.columns 
     from (
     Select E.columns 
      from (
       Select D.columns 
       from (Subquery) as D 
      ) as E 
     ) as F 
    Where F.condition = 2 
) as Z 

工会功能完美,但努力使SELECT语句从它(如上图所示),当它抛出一个错误:我在SQLSERVER看着下面的UNION

No column name was specified for column 1 of 'Z'

任何见解,将不胜感激,感谢帮助SQL新手。

编辑:解决 - 我误解了错误。问题是一个聚合函数需要一个别名,而不是整个子查询。留下未命名的聚合列对单独工会来说工作得很好,所以我甚至没有考虑它。感谢您的阅读。

+0

没有'在F,C和没有'DesiredResult1'在Z. – GurV

+0

此外condition'列,目的是什么做你正在做什么? – GurV

+1

您需要添加完整的列列表。你的错误在那里。 – Sefe

回答

0

这个错误可以很容易地复制。检查它here

如果你不命名单一UNION

SELECT * 
FROM (SELECT 'A','B') T1 
UNION 
SELECT * 
FROM (SELECT 'C','D') T2 

列,您将得到同样的错误:

No column name was specified for column 1 of 'T1'.

No column name was specified for column 2 of 'T1'.

No column name was specified for column 1 of 'T2'.

No column name was specified for column 2 of 'T2'.

简单的命名具有相同名称的每个公共列。

SELECT T3.Result1, T3.Result2 
FROM 
    (SELECT * 
    FROM (SELECT 'A' Result1, 'B' Result2) T1 
    UNION 
    SELECT * 
    FROM (SELECT 'C' Result1, 'D' Result2) T2) T3 

+----+---------+---------+ 
| | Result1 | Result2 | 
+----+---------+---------+ 
| 1 | A | B | 
+----+---------+---------+ 
| 2 | C | D | 
+----+---------+---------+