我正在编写存储过程。我正在使用的查询除了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;
创建存储过程时有没有办法做到这一点?或者有没有办法可以改变我的查询来做到这一点?
我想要做的就是从合并的列中取出重复项。除此之外,查询按预期执行。
感谢。我希望这是有道理的。
答案 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;