我已經做了SELECT
語句來得到這個輸出:如何使PIVOT成爲表格/交叉表格查詢?
MOVIE Critic Type Average Rating
------------------------ ------------ --------------
30 Minutes or Less Critic 2.00
30 Minutes or Less User 4.20
A Lonely Place to Die Critic 10.00
A Lonely Place to Die User 8.50
Taken Critic 6.17
Taken User 7.27
Taken 2 Critic 4.00
Taken 2 User 6.29
8 rows selected
這裏是SELECT
聲明:
SELECT MovieTitle AS "MOVIE", TBLCRITICCLASS.CRITICCLASSDESC AS "Critic Type", AVG(TBLREVIEW.REVIEWSTAR) AS "Average Rating"
FROM TBLMOVIE
INNER JOIN TBLREVIEW ON TBLMOVIE.MOVIEID = TBLREVIEW.MOVIEID
INNER JOIN TBLCRITIC ON TBLREVIEW.CRITICID = TBLCRITIC.CRITICID
INNER JOIN TBLCRITICCLASS ON TBLCRITIC.CRITICCLASSID = TBLCRITICCLASS.CRITICCLASSID
GROUP BY MovieTitle, TBLCRITICCLASS.CRITICCLASSDESC
ORDER BY Movietitle;
我想打開這個表到這個輸出與PIVOT
獲得與輸出批評評級和用戶評級,因爲它是自己的類別:
MOVIE Critic Rating User Rating
------------------------ ------------- -----------
30 Minutes or Less 2.00 4.20
A Lonely Place to Die 10.00 8.50
Taken 6.17 7.27
Taken 2 4.00 6.29
我試圖做是:
SELECT * FROM
(
SELECT MovieTitle AS "MOVIE", AVG(TBLREVIEW.REVIEWSTAR) AS "Critic Rating", AVG(TBLREVIEW.REVIEWSTAR) AS "User Rating"
FROM TBLMOVIE
INNER JOIN TBLREVIEW ON TBLMOVIE.MOVIEID = TBLREVIEW.MOVIEID
INNER JOIN TBLCRITIC ON TBLREVIEW.CRITICID = TBLCRITIC.CRITICID
INNER JOIN TBLCRITICCLASS ON TBLCRITIC.CRITICCLASSID = TBLCRITICCLASS.CRITICCLASSID
GROUP BY MovieTitle, TBLCRITICCLASS.CRITICCLASSDESC
ORDER BY Movietitle
)
PIVOT
(
AVG(TBLREVIEW.REVIEWSTAR) AS "Critic Rating"
FOR TBLREVIEW.REVIEWSTAR IN (TBLCRITICCLASS.CRITICCLASSDESC)
AVG(TBLREVIEW.REVIEWSTAR) AS "User Rating"
FOR TBLREVIEW.REVIEWSTAR IN (TBLCRITICCLASS.CRITICCLASSDESC)
)
我得到的錯誤,這可能是由於我缺乏與子查詢的技巧,我想知道爲什麼我沒有得到我的首選輸出,以及如何解決它。
編輯:
下面是相關聯的表:
幾件事情...'PIVOT'已經是一個聚集函數(如'GROUP BY'然後'選擇AVG(...)'),所以你不需要組,採取數據透視前的平均值;當你轉動時,'AVG()'可以完成。然後,甚至不要在子查詢中使用ORDER BY;如果需要,唯一的'ORDER BY'應該在外部查詢中。最後,'PIVOT'語法不對 - @xQbert顯示瞭如何在他的答案中做到這一點。如果您將添加到您的問題以顯示錶名和列,我們可以幫助您在一個語句中編寫您當前的查詢和PIVOT。 (我可以從你目前的嘗試中猜出,但我不會。) – mathguy
我已經將表格添加到pastebin鏈接。 –