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
*/