Oracle 组值作为列 header
Oracle group value as a column header
我有一个 table,其中我想在 select 中显示为新列的列值。接下来的图片就是我想要的。
我尝试使用“pivot”,但没有用。是否可以使用枢轴函数?
我的查询:
select m.tmarti as line, dsmdcp as column, vlmdmn as valuee
from TABLE01 m
--pivot (count(vlmdmn for dsmdcp in ('Cintura', 'Quadril', 'Busto'))
join TABLE02 t on t.tmarti = m.tmarti
where cdarti = 2026397
order by t.seqtam, dsmdcp;
您可以使用条件聚合来创建 select 语句字符串以在存储函数中动态转换这些列,其中 returns SYS_REFCURSOR
类型的值作为
CREATE OR REPLACE FUNCTION Get_Pivoted_Values RETURN SYS_REFCURSOR IS
v_recordset SYS_REFCURSOR;
v_sql VARCHAR2(32767);
v_cols VARCHAR2(32767);
BEGIN
SELECT LISTAGG( 'MAX( CASE WHEN column = '''||column||''' THEN valuee END )
AS "'||column||'"' , ',' ) WITHIN GROUP ( ORDER BY dsmdcp )
INTO v_cols
FROM ( SELECT DISTINCT dsmdcp
FROM table02 );
v_sql :=
'SELECT tmarti,'|| v_cols ||
' FROM
(
SELECT t1.tmarti AS line, dsmdcp AS column, vlmdmn AS valuee
FROM table01 t1
JOIN table02 t2
ON t2.tmarti = t1.tmarti
)
GROUP BY tmarti';
OPEN v_recordset FOR v_sql;
RETURN v_recordset;
END;
/
该函数可以从 SQL 开发者控制台调用为
SQL> DECLARE
result SYS_REFCURSOR;
BEGIN
:result := Get_Pivoted_Values;
END;
/
SQL> PRINT result;
我有一个 table,其中我想在 select 中显示为新列的列值。接下来的图片就是我想要的。
我尝试使用“pivot”,但没有用。是否可以使用枢轴函数?
我的查询:
select m.tmarti as line, dsmdcp as column, vlmdmn as valuee
from TABLE01 m
--pivot (count(vlmdmn for dsmdcp in ('Cintura', 'Quadril', 'Busto'))
join TABLE02 t on t.tmarti = m.tmarti
where cdarti = 2026397
order by t.seqtam, dsmdcp;
您可以使用条件聚合来创建 select 语句字符串以在存储函数中动态转换这些列,其中 returns SYS_REFCURSOR
类型的值作为
CREATE OR REPLACE FUNCTION Get_Pivoted_Values RETURN SYS_REFCURSOR IS
v_recordset SYS_REFCURSOR;
v_sql VARCHAR2(32767);
v_cols VARCHAR2(32767);
BEGIN
SELECT LISTAGG( 'MAX( CASE WHEN column = '''||column||''' THEN valuee END )
AS "'||column||'"' , ',' ) WITHIN GROUP ( ORDER BY dsmdcp )
INTO v_cols
FROM ( SELECT DISTINCT dsmdcp
FROM table02 );
v_sql :=
'SELECT tmarti,'|| v_cols ||
' FROM
(
SELECT t1.tmarti AS line, dsmdcp AS column, vlmdmn AS valuee
FROM table01 t1
JOIN table02 t2
ON t2.tmarti = t1.tmarti
)
GROUP BY tmarti';
OPEN v_recordset FOR v_sql;
RETURN v_recordset;
END;
/
该函数可以从 SQL 开发者控制台调用为
SQL> DECLARE
result SYS_REFCURSOR;
BEGIN
:result := Get_Pivoted_Values;
END;
/
SQL> PRINT result;