繁体   English   中英

SQL Pivot还是其他?

[英]SQL Pivot or something else?

我有一个预先存在的表(因此我无法更改此表),如下所示:

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

我想创建一个这样的临时表,仅选择一家公司:

查询XXX时,表格应如下所示:

GLSeg       Value
1           00003
2           NULL
3           00001

查询YYY时,表应如下所示:

GLSeg       Value
1           00002
2           00004
3           NULL

我已经看过pivot功能,但是没有看到根据需要创建临时表的方法。

使用cross apply(values ..)取消数据透视:

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

extrester演示: 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  |
+---------+-------+-------+

对于仅一家公司:

select v.GLSeg, v.Value
from t
  cross apply (values 
    (1,glseg1),(2,glseg2),(3,glseg3)
  ) v (GLSeg,Value)  
where t.company = 'xxx'

返回:

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

结合使用UNPIVOT和COALESCE:

  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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM