WITH T AS (SELECT '101' ID, '2014' YEAR, '1' TYPE, '100' VALUE FROM DUAL
UNION ALL
SELECT '101', '2015', '2', '200' FROM DUAL
UNION ALL
SELECT '102', '2014', '1', '100' FROM DUAL
UNION ALL
SELECT '102', '2015', '1', '100' FROM DUAL
UNION ALL
SELECT '103', '2015', '1', '300' FROM DUAL)
SELECT ID
FROM T
WHERE YEAR IN ('2014','2015')
GROUP BY ID
HAVING COUNT(DISTINCT TYPE) > 1 -- type이 2개 이상
--HAVING COUNT(DISTINCT TYPE) = 1 -- type이 동일
SELECT id
, MIN(DECODE(year, '2014', type)) type_2014
, MIN(DECODE(year, '2015', type)) type_2015
, DECODE( MIN(DECODE(year, '2014', type))
, MIN(DECODE(year, '2015', type))
, '일치', '불일치') result_1
FROM t
WHERE year IN ('2014', '2015')
GROUP BY id
;
WITH T (id, year, type, value) AS (
SELECT 101, 2014, 1, 100 FROM DUAL UNION ALL
SELECT 101, 2015, 2, 200 FROM DUAL UNION ALL
SELECT 102, 2014, 1, 100 FROM DUAL UNION ALL
SELECT 102, 2015, 1, 100 FROM DUAL UNION ALL
SELECT 103, 2015, 1, 300 FROM DUAL
)
SELECT ID
,"2014_TYPE","2014_VALUE"
,"2015_TYPE","2015_VALUE"
,DECODE("2014_TYPE","2015_TYPE",'일치','불일치') GB
FROM T
Pivot
(MIN(TYPE) TYPE,MIN(VALUE) AS VALUE For YEAR In (2014 AS "2014",2015 AS "2015"))
ORDER BY ID;
WITH TT(id, year, type, value) AS (
SELECT 101, 2014, 1, 100 FROM DUAL UNION ALL
SELECT 101, 2015, 2, 200 FROM DUAL UNION ALL
SELECT 102, 2014, 1, 100 FROM DUAL UNION ALL
SELECT 102, 2015, 1, 100 FROM DUAL UNION ALL
SELECT 103, 2015, 1, 300 FROM DUAL
)
SELECT id, year, type, value
, DECODE(year||type,
LAG(year) OVER(ORDER BY id, year)+1 || LAG(type) OVER(ORDER BY id, year),
'일치',
LAG(year) OVER(ORDER BY id, year DESC)-1 || LAG(type) OVER(ORDER BY id, year DESC),
'일치',
'불일치') 비교
FROM TT
;
와 답변 달아주신분들 모두 정말 감사합니다..^^