构建视图以查询具有相同列名的多个表

时间:2014-04-06 14:25:03

标签: sql sql-server

我正在尝试构建一个视图,因此我可以针对它编写一个查询:

 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视图来查询所有表。有什么帮助吗?

1 个答案:

答案 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 ALLCROSS 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