2017-08-15 16 views
0

我在這裏做我的第一篇文章,因爲我沒有找到我自己的解決方案。我有一點編程/ sql/oracle知識,但我偶爾與(我相信)Oracle數據庫一起工作。試圖計數結果,並給他們自己的列

我試圖完成的是採取查詢結果並給每個COUNT()自己的列。原因是爲Web應用程序製作報告。我需要結果填寫自己的專欄,以便爲報表設計器解析字段。

我的查詢如下所示:

SELECT ISSUE, COUNT(ISSUE) AS ISSUE_COUNT FROM ISSUE_TABLE WHERE TIME >TO_DATE('08/10/2017 00:00:00','MM/DD/YYYY HH24:MI:SS') AND TIME <TO_DATE('08/11/2017 00:00:00','MM/DD/YYYY HH24:MI:SS') GROUP BY ISSUE

如下這將返回一個結果:

ISSUE  | ISSUE_COUNT 
------------------------ 
A   | 30 
B   | 4 
C   | 24 
D   | 17 

想什麼我就結了是這樣的:

ISSUE  | A | B | C | D | 
---------------------------------- 
ISSUE_COUNT | 30 | 4 | 24 | 17 | 

我需要確保每個ISSUE_COUNT都是唯一的在其自己的列中或報表應用程序不會解析運行報表時顯示的結果。我想過使用PIVOT,但還沒有找到任何使用COUNT()或SUM()的解決方案。

+1

你需要的是'PIVOT'子句。這裏有一個快速鏈接:https://www.techonthenet.com/oracle/pivot.php – g00dy

+0

對於每個產生的「問題」(如A,B,C等),您可以使用類似於:SUM( DECODE(ISSUE,'A',ISSUE_COUNT,0))作爲「A」。我會做像'SELECT'ISSUE_COUNT一樣問題,SUM(解碼(ISSUE,'A',ISSUE_COUNT,0))作爲「A」來自...'。讓我知道這是否適合你。 – g00dy

+1

除非你有一個固定的問題清單,否則你必須動態地做這件事。這可能是報告圖層應根據當前查詢的結果進行的操作。 –

回答

0

您需要使用PIVOT子句。試試這個查詢:

SELECT * FROM (SELECT ISSUE, COUNT(ISSUE) AS ISSUE_COUNT FROM ISSUE_TABLE WHERE TIME >TO_DATE('08/10/2017 00:00:00','MM/DD/YYYY HH24:MI:SS') AND TIME <TO_DATE('08/11/2017 00:00:00','MM/DD/YYYY HH24:MI:SS') GROUP BY ISSUE )PIVOT (SUM(ISSUE_COUNT) FOR ISSUE IN ('A','B','C','D'))

+0

這個答案奏效。然而,它確實給了我一個「ORA-00907:缺少右括號」的錯誤。在最後添加一個括號修正了它。 :) – katfysh

+0

有什麼我可以添加使任何返回NULL爲零的字段? – katfysh

+0

@katfysh您可以使用'NVL'功能。 'NVL(value_to_be_evalueated,value_to_return)' – MagdielAybar

相關問題