Oracle 10g:逆透视列名称和值
Oracle 10g : Unpivot Column Names and Values
我有一个 table 并且关联的 values.I 需要取消透视 table 并将列与具有列名的行。
在我的场景中 GL_ 列动态增长。
创建Table脚本
CREATE TABLE TBL_NEWS
(
NEWS_ID VARCHAR2(50 BYTE) NOT NULL,
STAFF_ID VARCHAR2(50 BYTE),
MODIFIED_USER VARCHAR2(50 BYTE),
GL_NEWS_LOCAL_BRD NUMBER(38),
GL_GRD_GLOBAL_BRD NUMBER(38)
)
插入脚本
INSERT INTO TBL_NEWS (
NEWS_ID, STAFF_ID,
MODIFIED_USER,GL_NEWS_LOCAL_BRD,GL_GRD_GLOBAL_BRD)
VALUES (1 ,100,System,50,40);
Finally,My Result table needs to looks like this,Allways i need 1 users record
COLUMN_NAME NEWSCOUNT
GL_NEWS_LOCAL_BRD 50
GL_GRD_GLOBAL_BRD 40
我试着接受它,通过使用以下查询我可以接受列名。
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME='TBL_NEWS' AND COLUMN_NAME LIKE ('GL_%')
请帮我做这个。
您可以在 oracle 11g 中使用 UNPIVOT,并在 Oracle 10g 或以下版本中使用以下查询来实现您的要求:
select 'GL_NEWS_LOCAL_BRD' As COLUMN_NAME,GL_NEWS_LOCAL_BRD as NEWSCOUNT
from TBL_NEWS
union all
select 'GL_GRD_GLOBAL_BRD' as COLUMN_NAME ,GL_GRD_GLOBAL_BRD as NEWSCOUNT
from TBL_NEWS
或者如果您有 oracle 11g 和更高版本,您可以使用:
select COLUMN_NAME,NEWSCOUNT
from TBL_NEWS
unpivot( NEWSCOUNT
for COLUMN_NAME in (GL_NEWS_LOCAL_BRD ,GL_GRD_GLOBAL_BRD));
我有一个 table 并且关联的 values.I 需要取消透视 table 并将列与具有列名的行。
在我的场景中 GL_ 列动态增长。
创建Table脚本
CREATE TABLE TBL_NEWS
(
NEWS_ID VARCHAR2(50 BYTE) NOT NULL,
STAFF_ID VARCHAR2(50 BYTE),
MODIFIED_USER VARCHAR2(50 BYTE),
GL_NEWS_LOCAL_BRD NUMBER(38),
GL_GRD_GLOBAL_BRD NUMBER(38)
)
插入脚本
INSERT INTO TBL_NEWS (
NEWS_ID, STAFF_ID,
MODIFIED_USER,GL_NEWS_LOCAL_BRD,GL_GRD_GLOBAL_BRD)
VALUES (1 ,100,System,50,40);
Finally,My Result table needs to looks like this,Allways i need 1 users record
COLUMN_NAME NEWSCOUNT
GL_NEWS_LOCAL_BRD 50
GL_GRD_GLOBAL_BRD 40
我试着接受它,通过使用以下查询我可以接受列名。
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME='TBL_NEWS' AND COLUMN_NAME LIKE ('GL_%')
请帮我做这个。
您可以在 oracle 11g 中使用 UNPIVOT,并在 Oracle 10g 或以下版本中使用以下查询来实现您的要求:
select 'GL_NEWS_LOCAL_BRD' As COLUMN_NAME,GL_NEWS_LOCAL_BRD as NEWSCOUNT
from TBL_NEWS
union all
select 'GL_GRD_GLOBAL_BRD' as COLUMN_NAME ,GL_GRD_GLOBAL_BRD as NEWSCOUNT
from TBL_NEWS
或者如果您有 oracle 11g 和更高版本,您可以使用:
select COLUMN_NAME,NEWSCOUNT
from TBL_NEWS
unpivot( NEWSCOUNT
for COLUMN_NAME in (GL_NEWS_LOCAL_BRD ,GL_GRD_GLOBAL_BRD));