Другим способом сделать это является использование UNPIVOT
:
-- Sample Data:
WITH dat(ID,Location,NameA,ValueA,NameB,ValueB) AS
(SELECT 0 , 'BL' ,NULL ,NULL ,NULL ,NULL FROM dual
UNION
SELECT 1 , 'GT' ,'x' ,'y' ,NULL ,NULL FROM dual
UNION
SELECT 2 , 'SZ' ,'c' ,'d' ,'e' ,'f' FROM dual)
-- SQL-Statement:
SELECT id,location, NAME, value
FROM dat
UNPIVOT INCLUDE NULLS(
(NAME, VALUE) FOR sk IN ((NameA, ValueA) AS 1
,(NameB, ValueB) AS 2)
)
WHERE SK = 1 OR NAME IS NOT NULL