CREATE TABLE DEPT(NM VARCHAR(10),DEPTA VARCHAR(10),DEPTB VARCHAR(10),DEPTC VARCHAR(10))
INSERT INTO DEPT VALUES ('DEPT A','XX','',''),('DEPT B','','XX',''),('DEPT C','','','XX')
SELECT * FROM DEPT
NM DEPTA DEPTB DEPTC
---------- ---------- ---------- ----------
DEPT A XX
DEPT B XX
DEPT C XX
SELECT NM,
DEPT_DT
FROM(SELECT NM,DEPTA,DEPTB,DEPTC FROM DEPT)A
UNPIVOT (
DEPT_DT FOR
DEPT IN (
DEPTA,DEPTB,DEPTC ))AS UNPVT
--Since we have '' in columns we are getting the output as shown below
NM DEPT_DT
---------- ----------
DEPT A XX
DEPT A
DEPT A
DEPT B
DEPT B XX
DEPT B
DEPT C
DEPT C
DEPT C XX
--Final query --remove blank rows
SELECT NM,DEPT_DT
FROM(SELECT NM,DEPTA,DEPTB,DEPTC FROM DEPT)A
UNPIVOT (DEPT_DT FOR DEPT IN (DEPTA,DEPTB,DEPTC))AS UNPVT
WHERE DEPT_DT<>''
NM DEPT_DT
---------- ----------
DEPT A XX
DEPT B XX
DEPT C XX
I have explained about PIVOT and UNPIVOT with simple examples here
http://sqlbay.blogspot.in/2013/01/how-to-pivot-and-unpivot-tables.html
Ravimakhija88, if this helps please login to Mark As Answer. | Alert Moderator