トリング・フロリン・ギタのコードでは、出力は次のようになりました:
したがって、コードにいくつかの変更を加えると、次のようになります。
WITH a AS (
SELECT 1 sno, 'A' mappingtype, 'xx' username FROM dual
WHERE TYPE = 'A' AND username = 'xx'
UNION ALL
SELECT 2 sno, 'B' mappingtype, 'yy' username FROM dual
WHERE TYPE = 'B' AND username = 'yy'
UNION ALL
SELECT 3 sno, 'A' mappingtype, 'aa' username FROM dual
WHERE TYPE = 'A' AND username = 'aa'
UNION ALL
SELECT 4 sno, 'B' mappingtype, 'bb' username FROM dual
WHERE TYPE = 'B' AND username = 'bb')
SELECT CASE WHEN rnk = 1 THEN sno END AS sno,
CASE WHEN rnk = 1 THEN mappingtype END AS mappingtype,
username
FROM (SELECT sno,
mappingtype,
username,
ROW_NUMBER () OVER (PARTITION BY mappingtype ORDER BY sno) rnk
FROM a);
出力は Shalim question で同じになります: