每个视图或函数中的列名必须是唯一的

时间:2015-04-08 06:25:03

标签: sql-server sql-server-2012 views

在创建视图时我收到错误每个视图或函数中的列名必须是唯一的但是在框架选择查询时我只得到一个记录。我必须对这两个表使用col1和col2 ..如果数据不存在于它将从B表中获取一张表。我可以这样做。谢谢提前..

Create View ViewName AS
select 
A.col1 as col1,
A.col2  as col2,
null as col1,
B.col2 as col2
from table A,table B where A.col3=B.col3

3 个答案:

答案 0 :(得分:1)

从你的评论中,看起来你正在寻找这个:

Create View ViewName AS
select 
   A.col1,
   COALESCE(A.col2, B.col2) AS col2
from table A
  left join table B 
  on  A.col3=B.col3;

使用LEFT OUTER JOIN来处理连接失败的情况。

实际错误的说明:

错误说明了一切 - 您的视图有两列名为col1和两列col2。更改其中一个集的列名称。与视图不同,adhoc select查询不需要唯一的名称(或任何列名称)。

答案 1 :(得分:1)

根据您的评论,您可能需要这样的内容:

CREATE VIEW ViewName AS
SELECT ISNULL(A.col1, B.col1) as col1, -- This will return B.Col1 if A.Col1 is null
       ISNULL(A.col2, B.col2) as col2,
FROM table A INNER JOIN table B ON(A.col3 = B.col3)

修改

根据您对此答案的评论,您可以执行以下操作:

ALTER VIEW temp AS 

SELECT COALESCE(A.col1, D.col1) as col1,
COALESCE(A.col2, B.col2, C.col2, D.col2) as col2 
FROM table A 
INNER JOIN table1 B ON (A.col3=B.col3)
INNER JOIN table3 C ON (A.col3=C.col3)
INNER JOIN table4 D ON (A.col3=D.col3) 

注意:您编写了COALESCE(A.col1,null,null,D.col1),这相当于COALESCE(A.col1, D.col1),因为coalesce函数将返回它收到的非空的第一个参数。

答案 2 :(得分:0)

我们可以这样做吗?

alter view temp as select COALESCE(A.col1,null,null,D.col1) as col1, COALESCE(A.col2,B.col2,C.col2,D.col2) as col2 from table A INNER JOIN table1 B INNER JOIN table3 C INNER JOIN table4 ON (A.col3=B.col3 and A.col3=C.col3 and A.col3=D.col3)