1

我正在尝试构建索引视图但返回重复键错误,有什么建议吗?在对视图进行分组时,我不能使用原始表的主键。

非常感谢,

乔纳森

USE [IHG_MST]
GO    

SET NUMERIC_ROUNDABORT OFF
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,
    QUOTED_IDENTIFIER, ANSI_NULLS ON
GO

CREATE VIEW [dbo].[bvw_Grouped_Delphi_optimised] 
WITH SCHEMABINDING
AS
  SELECT       
   count_big(*) as tmp,
   SUM(isnull(id, 0)) as ID, 
   Holidex_Code, Export_Date, Account, PostAs, 
   StatusText, BookedByID, BookedByFullName, 
   EventStartDate, PropertyPID, PropertyName, 
   MtgClassName, BookingMarketSegment, 
   SUM(isnull(TotalFunctionRevenue, 0)) AS TotalFunctionRevenue, 
   SUM(isnull(FoodRevenue, 0)) AS FoodRevenue, 
   SUM(isnull(BevRevenue, 0)) AS BevRevenue, 
   SUM(isnull(RentalRevenue, 0)) AS RentalRevenue, 
   SUM(isnull(ResourceRevenue, 0)) AS ResourceRevenue, 
   SUM(isnull(AgreedRooms, 0)) AS AgreedRooms, 
   SUM(isnull(TotalRevenue, 0)) AS TotalRevenue, 
   SUM(isnull(CurrentRooms, 0)) AS CurrentRooms, 
   SUM(isnull(ExpectedAttendance,0)) AS ExpectedAttendance, 
   SUM(isnull(TotalGuestroomRevenue,0)) AS TotalGuestroomRevenue, 
   CreatedDate, LeadSource, LostReason, EventType, 
   FunctionRoomName, ReportGrouping, BookingID, ExtractDate, 
   BookingAbbrev, Uploaded_By, Uploaded_On
FROM
   dbo.MST_Delphi_Bookings
WHERE        
   (Holidex_Code IS NOT NULL) 
   AND (ReportGrouping <> 'Booking') 
   AND (LostReason <> 'Operator Entry Error') 
   AND (LostReason <> 'test call')
GROUP BY 
   Holidex_Code, Export_Date, Account, PostAs, StatusText, BookedByID, 
   BookedByFullName, EventStartDate, PropertyPID, PropertyName, MtgClassName, 
   BookingMarketSegment, CreatedDate, LeadSource, LostReason, EventType, 
   FunctionRoomName, ReportGrouping, BookingID, ExtractDate, BookingAbbrev, 
   Uploaded_By, Uploaded_On
GO


CREATE UNIQUE CLUSTERED INDEX IX_Delphi_Holidex_Code 
ON [dbo].[bvw_Grouped_Delphi_optimised](Holidex_Code, Export_Date)
GO

错误:

消息 1505,级别 16,状态 1,第 1 行
CREATE UNIQUE INDEX 语句终止,因为为对象名称“dbo.bvw_Grouped_Delphi_optimised”和索引名称“IX_Delphi_Holidex_Code”找到重复键。重复键值为 (ASDKE, 2014-03-24)。

@usr:

CREATE UNIQUE CLUSTERED INDEX IX_Delphi_Holidex_Code 
ON [dbo].[bvw_Grouped_Delphi_optimised](Holidex_Code, Export_Date, Account, PostAs, 
   StatusText, BookedByID, BookedByFullName, 
   EventStartDate, PropertyPID, PropertyName, 
   MtgClassName, BookingMarketSegment, 
   SUM(isnull(TotalFunctionRevenue, 0)) AS TotalFunctionRevenue, 
   SUM(isnull(FoodRevenue, 0)) AS FoodRevenue, 
   SUM(isnull(BevRevenue, 0)) AS BevRevenue, 
   SUM(isnull(RentalRevenue, 0)) AS RentalRevenue, 
   SUM(isnull(ResourceRevenue, 0)) AS ResourceRevenue, 
   SUM(isnull(AgreedRooms, 0)) AS AgreedRooms, 
   SUM(isnull(TotalRevenue, 0)) AS TotalRevenue, 
   SUM(isnull(CurrentRooms, 0)) AS CurrentRooms, 
   SUM(isnull(ExpectedAttendance,0)) AS ExpectedAttendance, 
   SUM(isnull(TotalGuestroomRevenue,0)) AS TotalGuestroomRevenue, 
   CreatedDate, LeadSource, LostReason, EventType, 
   FunctionRoomName, ReportGrouping, BookingID, ExtractDate, 
   BookingAbbrev, Uploaded_By, Uploaded_On)
GO
4

1 回答 1

3

您必须创建一个唯一的聚集索引。文档清楚地表明没有办法解决它。

如果您的数据在任何键上都不是唯一的,这通常是数据质量问题,概念错误是彻底的错误。因此,我建议您重新评估此设计。

如果你坚持这样做,你必须发明/制造一些独特的钥匙。幸运的是,所有使用 group-by 的查询都有这样一个键:分组列。将这些列添加到视图并在它们上创建索引。

这在逻辑上是您视图的主键。对某事进行分组会导致该“某事”在输出中是唯一的。

于 2014-07-24T19:07:42.023 回答