• Not sure this is a particularly efficient way to do this but this might work:

    SELECT set_id, product, attribute=CAST(item AS INT)

    FROM (

    SELECT set_id=MIN(set_id), product, allattributes

    FROM (

    SELECT set_id, product, attribute

    ,allattributes=STUFF((

    SELECT ',' + STR(attribute, 5)

    FROM #temp b

    WHERE a.set_id = b.set_id AND a.product = b.product

    ORDER BY attribute

    FOR XML PATH('')), 1, 1, '')

    FROM #temp a) a

    GROUP BY product, allattributes) a

    CROSS APPLY dbo.DelimitedSplit8K(allattributes, ',') b

    DelimitedSplit8K is (as the name implies) a delimited string splitter that can be found here[/url].


    My mantra: No loops! No CURSORs! No RBAR! Hoo-uh![/I]

    My thought question: Have you ever been told that your query runs too fast?

    My advice:
    INDEXing a poor-performing query is like putting sugar on cat food. Yeah, it probably tastes better but are you sure you want to eat it?
    The path of least resistance can be a slippery slope. Take care that fixing your fixes of fixes doesn't snowball and end up costing you more than fixing the root cause would have in the first place.

    Need to UNPIVOT? Why not CROSS APPLY VALUES instead?[/url]
    Since random numbers are too important to be left to chance, let's generate some![/url]
    Learn to understand recursive CTEs by example.[/url]
    [url url=http://www.sqlservercentral.com/articles/St