从嵌套子查询的并集中选择

时间:2016-12-30 17:43:43

标签: sql-server unions

我很确定这是应用正确别名的问题,我只是不确定我哪里出错了。我在sqlserver中查看以下UNION:

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

union本身功能完美,但是当试图从它发出SELECT语句时(如上所示)它会抛出一个错误:

  

没有为'Z'

的第1列指定列名

感谢帮助SQL新手,感谢任何见解。

编辑:已解决 - 我误解了错误。问题是需要别名的聚合函数,而不是整个子查询。保留未命名的聚合列对于联盟来说工作正常,所以我甚至没有考虑它。谢谢你好好阅读。

1 个答案:

答案 0 :(得分:0)

可以轻松复制此错误。检查here

如果没有在单个UNION中命名列

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

你会得到同样的错误:

  

没有为'T1'的第1列指定列名。

     

没有为'T1'的第2列指定列名。

     

没有为'T2'的第1列指定列名。

     

没有为'T2'的第2列指定列名。

只需使用相同的名称命名每个公共列。

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    |
+----+---------+---------+