我很确定这是应用正确别名的问题,我只是不确定我哪里出错了。我在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新手,感谢任何见解。
编辑:已解决 - 我误解了错误。问题是需要别名的聚合函数,而不是整个子查询。保留未命名的聚合列对于联盟来说工作正常,所以我甚至没有考虑它。谢谢你好好阅读。
答案 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 |
+----+---------+---------+