2014-05-01 42 views
-2

我有一個項目由一個基於某個過濾器生成一個表的函數組成。然後,我發現一個問題,即當某個過濾器的某些組合沒有返回任何內容時,因爲它在瀏覽器中呈現的時間少於組合的數量。 爲了實現它,我想給「 - 」標記沒有保存在表中的損失記錄。從SQL查詢生成數據透視表

我的第一種方法是逐個檢查帶過濾器的數組,並且如果條件與'丟失行'匹配,它將推送數組,直到結果中的所有缺失記錄都填充' - '。但是,它會處理時間,因爲最後必須重新排序,然後再構建到想要的表格中。的主表 「A」

示例模式:

amount_of_product, id_product, id_people, id_place. 

主鍵列有:

id_product, id_people, id_place. 

主表的內容是:

23456, book-a, 1, aa 
5678, book-b, 1, cc 
2587, book-b, 1, aa 

源查詢將如下所示:

select * from A 
where 
    id_product in ('book-a', 'book-b') 
    and id_people in ('1') and id_place in ('aa', 'bb', 'cc') 
order by id_product, id_place 

然後,我們希望在表格視圖(html)中顯示所有選定過濾器的所有組合。應該渲染6行,空單元顯示爲"-"

樣品結果表:

Sample 1

我能做到這一點有效,還是有什麼方法解決呢?

在此先感謝。

+1

表現出一定的scnreehots,的jsfiddle,代碼,... – DanFromGermany

+0

在Oracle中,你可以使用'pivot':'SELECT * FROM樞軸(SUM(amount_of_product)爲id_place在( 'AA','BB 」, 'CC'))'。 postgresql ['crosstab'](http://www.postgresonline.com/journal/index.php?/archives/14-CrossTab-Queries-in-PostgreSQL-using-tablefunc-contrib.html)函數應該提供類似的功能。 –

回答

0

感謝上面的一些建議。 我已經嘗試在postgresql中使用交叉表函數來生成數據透視表,但是我無法生成更復雜的表格。因此,我使用另一種方法逐步檢索基於組合行顏色的所有數據(例如,從id_place'aa',id_people'1',id-product'aa'等查詢),並構造每個表頭行和然後建立數據。

方面