. , :
WITH cte AS (
SELECT DISTINCT
p.ID, p.SUB_ID, p.ITEM_NAME AS ITEM, p.ITEM_PRICE AS PRICE,
ROW_NUMBER() OVER (PARTITION BY p.ID ORDER BY p.SUB_ID) rn
FROM PRICE_LIST p
WHERE
)
SELECT
CASE WHEN t.rn = 1 THEN TO_CHAR(t.ID) ELSE '' END AS ID,
t.SUB_ID, t.ITEM, t.PRICE
FROM cte t
ORDER BY
t.ID,
t.SUB_ID
Gordon:
/CTE , ROW_NUMBER() CASE:
SELECT DISTINCT
CASE WHEN ROW_NUMBER() OVER (PARTITION BY p.ID ORDER BY p.SUB_ID) = 1
THEN TO_CHAR(p.ID) ELSE '' END AS ID,
p.SUB_ID, p.ITEM_NAME AS ITEM, p.ITEM_PRICE AS PRICE
FROM PRICE_LIST p
WHERE
ORDER BY
p.ID,
p.SUB_ID