在 oracle 11g 中使用带有 PIVOT 的函数

Using functions with PIVOT in oracle 11g

我正在尝试对 ORACLE 11G 中检索到的列进行一些格式化。

目前我的查询如下:

SELECT * FROM
(
    SELECT DISTINCT MOVIETITLE "MOVIE", TO_CHAR(ROUND(AVG(REVIEWSTAR),3),'99.00') "REVIEWSTAR",CRITICCLASSDESC
    FROM TBLMOVIE JOIN TBLREVIEW USING(MOVIEID) 
    JOIN TBLCRITIC USING(CRITICID) 
    JOIN TBLCRITICCLASS USING(CRITICCLASSID)
    GROUP BY MOVIETITLE,CRITICCLASSDESC
)
PIVOT
(
    AVG(REVIEWSTAR)
    FOR CRITICCLASSDESC IN('Critic' AS "CRYTIC RATING",'User' AS "USER RATING")
)
ORDER BY MOVIE;

我得到以下输出:

我想要以下输出:

我的意思是尾随 0 的列的格式。

SELECT MOVIETITLE "MOVIE", 
case when CRITICCLASSDESC = 'Critic' then TO_CHAR(ROUND(AVG(REVIEWSTAR),3),'99.00') end as "Critic Rating",
case when CRITICCLASSDESC = 'User' then TO_CHAR(ROUND(AVG(REVIEWSTAR),3),'99.00') end as "User Rating"
FROM TBLMOVIE JOIN TBLREVIEW USING(MOVIEID) 
JOIN TBLCRITIC USING(CRITICID) 
JOIN TBLCRITICCLASS USING(CRITICCLASSID)
ORDER BY MOVIE;

如果您总是只有一个 user rating 和一个 critic rating,这是一种不使用 pivot.

的简单方法

您需要更改结果中的输出(在枢轴计算之后)

SELECT 
MOVIE,  
TO_CHAR("CRYTIC RATING",'99.00'),
TO_CHAR("USER RATING",  '99.00') 
FROM
(
    SELECT DISTINCT MOVIETITLE "MOVIE", ROUND(AVG(REVIEWSTAR),3)"REVIEWSTAR",CRITICCLASSDESC
    FROM TBLMOVIE JOIN TBLREVIEW USING(MOVIEID) 
    JOIN TBLCRITIC USING(CRITICID) 
    JOIN TBLCRITICCLASS USING(CRITICCLASSID)
    GROUP BY MOVIETITLE,CRITICCLASSDESC
)
PIVOT
(
    AVG(REVIEWSTAR)
    FOR CRITICCLASSDESC IN('Critic' AS "CRYTIC RATING",'User' AS "USER RATING")
)
ORDER BY MOVIE;