消除存储过程中COALESCED列的重复项?

时间:2012-03-01 16:12:42

标签: sql sql-server sql-server-2008 stored-procedures coalesce

我正在编写存储过程。我正在使用的查询除了2列之外,每行都采用相同的行,并将它们组合成一行,并将这两行合并为一行。现在我遇到了另一个问题。有时在这两行中有重复的值,我想消除重复。

示例:

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 个答案:

答案 0 :(得分:2)

您的子查询中需要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;
相关问题