如何创建此查询的视图任何人都可以帮助我,我想创建这个视图,但它显示我的错误
消息4506,级别16,状态1,过程订单视图,第3行每个视图或函数中的列名必须是唯一的。视图或函数“ordersview”中的列名“ID”被指定多次。
CREATE VIEW ordersview
AS
Select * from UserClaimData cd
Inner join UserClaimDeductions ud on
ud.CLAIMID = cd.ID
Inner join UserClaimApproval ua on
ua.CLAIMID = cd.ID
inner join ClaimDataBreakdown cb on
cb.CLAIMID = cd.ID
inner join AppExpenseTypes ae on
ae.ID = cb.EXPENSETYPE
inner join AppNOWTypes an on
ae.ID = an.EXPENSETYPEID
inner join AppAreas aa on
aa.ID = cb.AREAID
inner join AppZones az on
cb.ZONEID = az.ID
inner join AppRegions ar on
ar.ID = cb.REGIONID
您提出的问题的答案是专门引用每个表中的元素;例如:
CREATE VIEW ordersview
AS
Select cd.ID AS ID1, ua.ID as ID2, etc... from UserClaimData cd
Inner join UserClaimDeductions ud on
ud.CLAIMID = cd.ID
Inner join UserClaimApproval ua on
ua.CLAIMID = cd.ID
inner join ClaimDataBreakdown cb on
cb.CLAIMID = cd.ID
inner join AppExpenseTypes ae on
ae.ID = cb.EXPENSETYPE
inner join AppNOWTypes an on
ae.ID = an.EXPENSETYPEID
inner join AppAreas aa on
aa.ID = cb.AREAID
inner join AppZones az on
cb.ZONEID = az.ID
inner join AppRegions ar on
ar.ID = cb.REGIONID
但是,我建议你不要在视图中放置这么复杂的连接。考虑所需的列,并考虑存储过程或表值函数。
你不明白错误信息的哪一部分?
你有select *
,它汇集了所有表格中的所有列。仅仅基于join
条件,很明显大多数表都有一个ID
列,因此有多个列称为ID
。 CLAIMID
似乎也很受欢迎。
一般来说,不鼓励使用select *
。但是,它不应该用于视图。视图应说明它包含的列:
select cd.Id, . . .
您的视图有多个具有相同名称的列,这会导致错误。
AppRegions
有一个名为ID
的专栏AppAreas
有一个名为ID
的专栏UserClaimData
有一个名为ID
的专栏更改Select *
以指定要在View表上使用的表的列,并添加特定名称,或者只是不要放置它们。
您需要更改视图中某些列的名称。使用AppAreas.ID as aaID
视图就像一个虚拟表,因此2个(或更多)列的名称不能相同。
因此,要避免这种情况,请在您的选择查询而不是*提供列名称,如果有两列具有相同名称并且您在视图中都需要它们,请为它们指定不同的别名。
假设您在TableAU和TableAU中有ColumnS,并且您希望它们都在视图中。创建这样的视图
CREATE VIEW vm_Sample
SELECT
A.COLUMNA COLUMNA_1,
B.COLUMNA COLUMNA_2
FROM TABLEA A INNER JOIN TABLE B
ON A.ID = B.ID