我正在尝试构建一个视图,因此我可以针对它编写一个查询:
FROM Datebase.dbo.[AllQtrs]
使用SQL Server'创建视图'功能,它吐出以下内容:
SELECT
dbo.[2010 Q3].*, dbo.[2010 Q4].*,
dbo.[2011 Q1].*, dbo.[2011 Q2].*,
dbo.[2011 Q3].*, dbo.[2011 Q4].*,
dbo.[2012 Q1].*, dbo.[2012 Q2].*,
dbo.[2012 Q3].*, dbo.[2013 Q2].*,
dbo.[2013 Q1].*, dbo.[2012 Q4].*,
dbo.[2014 Q1].*, dbo.[2013 Q4].*,
dbo.[2013 Q3].*, dbo.[2014 Q2].*
FROM
dbo.[2010 Q3]
CROSS JOIN
dbo.[2010 Q4]
CROSS JOIN
dbo.[2011 Q1]
CROSS JOIN
dbo.[2011 Q2]
CROSS JOIN
dbo.[2011 Q3]
CROSS JOIN
dbo.[2011 Q4]
CROSS JOIN
dbo.[2012 Q1]
CROSS JOIN
dbo.[2012 Q2]
CROSS JOIN
dbo.[2012 Q3]
CROSS JOIN
dbo.[2012 Q4]
CROSS JOIN
dbo.[2013 Q1]
CROSS JOIN
dbo.[2013 Q2]
CROSS JOIN
dbo.[2013 Q3]
CROSS JOIN
dbo.[2013 Q4]
CROSS JOIN
dbo.[2014 Q1]
CROSS JOIN
dbo.[2014 Q2]
我的所有表都具有相同的列名/属性。我收到的错误信息是
每个视图或函数中的列名必须是唯一的。列名称XY多次指定。
目标是通过查询AllQtrs视图来查询所有表。有什么帮助吗?
答案 0 :(得分:2)
您必须手动指定名称并为其定义唯一名称。这样您就可以显示列。一个例子是
SELECT dbo.[2010 Q3].Column1 AS 2010Q3Column1,
dbo.[2010 Q3].Column2 As 2010Q3Column2,
dbo.[2010 Q3].Column1 As 2010Q4Column1
etc.
顺便说一下,确保CROSS JOIN
确实是你想要的 - 看起来你真的想在这里使用UNION ALL
。 CROSS JOIN
将从所有表中返回所有行的笛卡尔积,即如果每个表中有10行,则它将是10 ^ 16条记录,这些记录在几十年内肯定无法完成。
使用UNION ALL,它将如下所示:
SELECT Column1, Column2 {add here the remaining column names} FROM dbo.[2010 Q3] UNION ALL
SELECT Column1, Column2 {add here the remaining column names} FROM dbo.[2010 Q4] UNION ALL
SELECT Column1, Column2 {add here the remaining column names} FROM dbo.[2011 Q1] UNION ALL
...etc