Удаление дубликатов из столбца COALESCED в хранимой процедуре? - PullRequest
0 голосов
/ 01 марта 2012

Я пишу хранимую процедуру. Запрос, который я использую, берет строки, которые идентичны во всех отношениях, кроме двух столбцов, объединяет их в одну строку и объединяет две строки в одну. Теперь я сталкиваюсь с другой проблемой. Иногда в этих двух строках есть повторяющиеся значения, и я хочу устранить их.

Пример:

TeamID    Team    City     State    Equipment
1         Thunder OKC      OK       Basketball, Basketball, Basketball, Shorts, Jersey, Jersey

Я хочу, чтобы это было так:

TeamID    Team    City     State    Equipment
1         Thunder OKC      OK       Basketball, Shorts, Jersey

Вот запрос, который я использую, который объединяет строки.

SELECT DISTINCT 
            AssignedOfficeID, AssignedOffice, OperatorID, OperatorName, RigMasterID, DrillerRigNumber, WellID,
            County, State, WellName, CompanyMan, CompanyManPhone, DateStart, DateStop, Representative, RepresentativeID, RepresentativeAssignedID, RepresentativeAssigned,
            PricePerDay, CotNumber, CustomerOrderTicketNumber,
            Equipment = STUFF((SELECT ', ' + COALESCE(RentalEquipmentAbbreviation, EquipmentAbbreviation, '')
                            FROM @ActiveRigsInfo AS ARI2
                            WHERE ARI2.AssignedOfficeID = ARI1.AssignedOfficeID AND ARI2.AssignedOfficeID = ARI1.AssignedOfficeID
                            AND ARI2.OperatorID = ARI1.OperatorID AND ARI2.OperatorName = ARI1.OperatorName
                            AND ARI2.RigMasterID = ARI1.RigMasterID AND ARI2.DrillerRigNumber = ARI1.DrillerRigNumber
                            AND ARI2.WellID = ARI1.WellID AND ARI2.County = ARI1.County AND ARI2.State = ARI1.State
                            AND ARI2.WellName = ARI1.WellName AND ARI2.CompanyMan = ARI2.CompanyMan AND ARI2.CompanyManPhone = ARI1.CompanyManPhone
                            AND ARI2.DateStart = ARI1.DateStart AND ARI2.Representative = ARI1.Representative
                            AND ARI2.CotNumber = ARI1.CotNumber  
                            FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'),1,2,'')
                        FROM @ActiveRigsInfo AS ARI1   
                        ORDER BY AssignedOffice, OperatorID, RigMasterID;

Есть ли способ сделать это при создании хранимой процедуры? Или есть способ, которым я могу изменить свой запрос, чтобы сделать это?

Все, что я хочу сделать, это вынуть дубликаты из объединенных столбцов. Запрос выполняется, как и ожидалось, за исключением этого.

Спасибо. Я надеюсь, что в этом есть смысл.

1 Ответ

2 голосов
/ 01 марта 2012

Вам нужно DISTINCT в вашем подзапросе:

SELECT DISTINCT 
            AssignedOfficeID, AssignedOffice, OperatorID, OperatorName, RigMasterID, DrillerRigNumber, WellID,
            County, State, WellName, CompanyMan, CompanyManPhone, DateStart, DateStop, Representative, RepresentativeID, RepresentativeAssignedID, RepresentativeAssigned,
            PricePerDay, CotNumber, CustomerOrderTicketNumber,
            Equipment = STUFF((SELECT DISTINCT ', ' + COALESCE(RentalEquipmentAbbreviation, EquipmentAbbreviation, '')
                            FROM @ActiveRigsInfo AS ARI2
                            WHERE ARI2.AssignedOfficeID = ARI1.AssignedOfficeID AND ARI2.AssignedOfficeID = ARI1.AssignedOfficeID
                            AND ARI2.OperatorID = ARI1.OperatorID AND ARI2.OperatorName = ARI1.OperatorName
                            AND ARI2.RigMasterID = ARI1.RigMasterID AND ARI2.DrillerRigNumber = ARI1.DrillerRigNumber
                            AND ARI2.WellID = ARI1.WellID AND ARI2.County = ARI1.County AND ARI2.State = ARI1.State
                            AND ARI2.WellName = ARI1.WellName AND ARI2.CompanyMan = ARI2.CompanyMan AND ARI2.CompanyManPhone = ARI1.CompanyManPhone
                            AND ARI2.DateStart = ARI1.DateStart AND ARI2.Representative = ARI1.Representative
                            AND ARI2.CotNumber = ARI1.CotNumber  
                            FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'),1,2,'')
                        FROM @ActiveRigsInfo AS ARI1   
                        ORDER BY AssignedOffice, OperatorID, RigMasterID;
...