我有一个表和关联的值,我需要取消该表的旋转并将列取为具有列名的行。
在我的方案中,GL_列动态增长。
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);
最后,我的结果表需要看起来像这样,总是我需要1个用户记录
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));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句