2017-09-15 2 views
1

나는 기존의 테이블이 같은 (그래서 나는이 테이블을 변경할 수 없습니다) :SQL 피벗 또는 다른 것?

Company  GLSeg1  GLSeg2  GLSeg3 
XXX   00003  NULL  00001 
YYY   00002  00004  NULL 

나는이 같은 임시 테이블을 생성하고 싶은, 한 회사 선택 :

XXX를 쿼리 할 때 테이블은 다음과 같이한다 : YYY를 쿼리 할 때

GLSeg  Value 
1   00003 
2   NULL 
3   00001 

테이블이 다음과 같아야합니다

GLSeg  Value 
1   00002 
2   00004 
3   NULL 

pivot 함수를 살펴 보았지만 필요에 따라 임시 테이블을 만드는 방법이 보이지 않습니다.

답변

0

데이터 피벗 해제 할 cross apply(values ..)를 사용하여 :

select t.Company, v.GLSeg, v.Value 
from t 
    cross apply (values 
    (1,glseg1),(2,glseg2),(3,glseg3) 
) v (GLSeg,Value) 

rextester 데모 : http://rextester.com/ZKTD58113

반환 : 하나 개의 회사에 대한

+---------+-------+-------+ 
| Company | GLSeg | Value | 
+---------+-------+-------+ 
| xxx  |  1 | 00003 | 
| xxx  |  2 | NULL | 
| xxx  |  3 | 00001 | 
| yyy  |  1 | 00002 | 
| yyy  |  2 | 00004 | 
| yyy  |  3 | NULL | 
+---------+-------+-------+ 

:

0 123,577,

반환 :

+-------+-------+ 
| GLSeg | Value | 
+-------+-------+ 
|  1 | 00003 | 
|  2 | NULL | 
|  3 | 00001 | 
+-------+-------+ 
0

유착과 UNPIVOT 사용 :

SELECT COMPANY 
     , STUFF(SUBJECT,1,5,'') AS GLSEG 
     , CASE WHEN VALUE ='<NULL>' THEN NULL ELSE VALUE END AS VALUE 
    FROM (SELECT COMPANY 
       , COALESCE(GLSEG1,'<NULL>') AS GLSEG1 
       , COALESCE(GLSEG2,'<NULL>') AS GLSEG2 
       , COALESCE(GLSEG3,'<NULL>') AS GLSEG3 
     FROM SEG_COMP) A 
    UNPIVOT(VALUE FOR SUBJECT IN (GLSEG1, GLSEG2,GLSEG3)) U 
    WHERE COMPANY='XXX' 

출력 :

COMPANY GLSEG VALUE 
XXX  1  00003 
XXX  2  NULL 
XXX  3  00001