在 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;
我正在尝试对 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;