Here a solution without both DISTINCT
and GROUP BY
clauses.
It is based on XML and XQuery, and using the distinct-values()
XQuery function to achieve the desired outcome.
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, FeatureName nvarchar(100), DisplayOrder Int);
INSERT INTO @tbl(FeatureName,DisplayOrder) VALUES
('Competitor Supply Current',7),
('Competitor Minimum Supply Voltage', 5),
('Competitor Maximum Supply Voltage', 4),
('Competitor Minimum Operating Temperature', 8),
('Competitor Maximum Operating Temperature', 9),
('Competitor Operating Frequency', 6),
('Competitor Applications', 3),
('NXP Supply Current', 7),
('NXP Minimum Supply Voltage', 5),
('NXP Maximum Supply Voltage', 4),
('NXP Minimum Operating Temperature', 8),
('NXP Maximum Operating Temperature', 9),
('NXP Operating Frequency', 6),
('NXP Applications', 3),
('Competitor Automotive', 1),
('NXP Automotive', 1),
('Competitor SecurityApproval', 1),
('NXP SecurityApproval', 1),
('Competitor Normalized Package Name', 2),
('NXP Normalized Package Name', 2),
('Competitor ZTemperatureGrade', 10),
('NXP ZTemperatureGrade', 10);
-- DDL and sample data population, end
SELECT (
SELECT FeatureName AS [r] FROM @tbl
FOR XML PATH(''), TYPE, ROOT('root')
).query('
for $x in distinct-values(/root/r/text())
let $token := data(concat("[",$x,"]"))
return
if ($x eq (distinct-values(/root/r/text())[last()])[1]) then $token
else concat($token, ",")
').value('.', 'NVARCHAR(MAX)') AS Result;