每个视图或函数中的列名必须是唯一的
Posted
技术标签:
【中文标题】每个视图或函数中的列名必须是唯一的【英文标题】:Column names in each view or function must be unique 【发布时间】:2015-04-08 06:25:02 【问题描述】:在创建视图时我收到错误,但是在构建选择查询时我只得到一个记录。我必须对两个表都使用 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
【问题讨论】:
但我需要对两个表都使用 col1 和 col2..如果 A 表中不存在数据,它将从 B 表中获取.. 【参考方案1】:从您的 cmets 看来,您正在寻找这个:
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
。更改其中一组的列名称。与视图不同,即席选择查询不需要唯一的名称(或任何列名,就此而言)。
【讨论】:
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从表 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)【参考方案2】:根据您的评论,您可能需要这样的东西:
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)
编辑
根据您对此答案的 cmets,您可以执行以下操作:
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 张桌子怎么办? 然后使用 COALESCE。它可能需要超过 2 个参数。 msdn.microsoft.com/en-us/library/ms190349.aspx 像这样..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) 但它给出了所有记录组合。JOIN 不起作用 你能提供一些示例数据和所需的输出吗?【参考方案3】:这样我们可以做到吗?
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)
【讨论】:
以上是关于每个视图或函数中的列名必须是唯一的的主要内容,如果未能解决你的问题,请参考以下文章