• Since the number of PriceRules has a known limit, the following proposal should work:

    step 1: use ROW_NUMBER to identify the first, second a.s.o. PriceRule per CUST_NO

    and step 2: select the values according to the position calculated before.

    DECLARE @Table TABLE (CUST_NO INT, PriceRule CHAR(1), Discount numeric(8,2))

    INSERT into @Table

    SELECT 1234, 'I', 2.30 UNION ALL

    SELECT 1234, 'J', 1.55 UNION ALL

    SELECT 1234, 'K', 0.99 UNION ALL

    SELECT 1234, 'L', 2.25 UNION ALL

    SELECT 2345, 'I', 2.30 UNION ALL

    SELECT 2345, 'M', 2.15 UNION ALL

    SELECT 3456, 'K', 0.99

    ;WITH CTE_rowTable(id,CUST_NO , PriceRule, Discount)

    AS(

    SELECT ROW_NUMBER() OVER(PARTITION BY CUST_NO ORDER BY CUST_NO),

    CUST_NO , PriceRule, Discount FROM @Table

    )

    SELECT CUST_NO,

    MAX(CASE WHEN ID=1 THEN PriceRule ELSE null END) AS Rule1,

    MAX(CASE WHEN ID=1 THEN Discount ELSE null END) AS Disc1,

    MAX(CASE WHEN ID=2 THEN PriceRule ELSE null END) AS Rule2,

    MAX(CASE WHEN ID=2 THEN Discount ELSE null END) AS Disc2,

    MAX(CASE WHEN ID=3 THEN PriceRule ELSE null END) AS Rule3,

    MAX(CASE WHEN ID=3 THEN Discount ELSE null END) AS Disc3,

    MAX(CASE WHEN ID=4 THEN PriceRule ELSE null END) AS Rule4,

    MAX(CASE WHEN ID=4 THEN Discount ELSE null END) AS Disc4,

    MAX(CASE WHEN ID=5 THEN PriceRule ELSE null END) AS Rule5,

    MAX(CASE WHEN ID=5 THEN Discount ELSE null END) AS Disc5

    FROM CTE_rowTable

    GROUP BY CUST_NO

    /* Result set

    CUST_NORule1Disc1Rule2Disc2Rule3Disc3Rule4Disc4Rule5Disc5

    1234I2.30J1.55K0.99L2.25I2.30

    2345I2.30M2.15I2.30M2.15NULLNULL

    3456K0.99K0.99NULLNULLNULLNULLNULLNULL

    */



    Lutz
    A pessimist is an optimist with experience.

    How to get fast answers to your question[/url]
    How to post performance related questions[/url]
    Links for Tally Table [/url] , Cross Tabs [/url] and Dynamic Cross Tabs [/url], Delimited Split Function[/url]