2013-03-19 80 views
0

今天的另一個問題。 MS Access。交叉表查詢獲取基於類別的記錄數

給出表:
FormsList

FormID LocationID FormTypeID FormDate 
1 001 001 21.11.2012 
2 002 002 20.11.2012 
3 001 003 16.11.2012 
4 001 001 13.12.2012 
4 003 004 13.12.2012 

...
LocationsList

LocationID LocationName 
001 FirstLocation 
002 SecondLocation 
003 ThirdLocation 
004 FourthLocation 
... 

FormTypes

FormTypeID FormType 
001 "C" 
002 "R" 
003 "F" 
004 "X" 
... 

我需要一個交叉表查詢,或收穫的人其中有一個表:

  • 第1個欄標題:LocationID
  • 第2,3,4列等標題:「C」,「R」,「F」,「X」。
  • 列1 - 所有從LocationsList
  • 柱LocationsID 2,3,4,5-等 - 的每個位置

查詢/ s的應該顯示上面表中的以下結果對應的形式數:

LocationID "C" "R" "F" "X" 
001 2 0 0 0 
002 0 1 0 0 
003 0 0 0 1 
004 0 0 0 0 

謝謝。

回答

1

您應該可以使用以下方法來轉換數據:

TRANSFORM Count(FormsList.FormTypeID) 
select LocationsList.LocationId 
from (LocationsList 
inner join FormsList 
    on LocationsList.LocationId = FormsList.LocationId) 
inner join FormTypes 
    on FormsList.FormTypeId = FormTypes.FormTypeId 
GROUP BY LocationsList.LocationId 
PIVOT FormTypes.FormType 

編輯,如果你需要的所有位置,那麼你將要使用LEFT JOIN

TRANSFORM Count(FormsList.FormTypeID) 
select LocationsList.LocationId 
from (LocationsList 
left join FormsList 
    on LocationsList.LocationId = FormsList.LocationId) 
left join FormTypes 
    on FormsList.FormTypeId = FormTypes.FormTypeId 
GROUP BY LocationsList.LocationId 
PIVOT FormTypes.FormType 
+0

天才要比.. 。謝謝:D 對於一個獎勵:即使沒有表格記錄在那個位置(從004的情況下的結果表格) 和列中的所有表格類型,即使沒有記錄表格鍵入(從上面的結果表中選擇他是「F」的情況)。 另外,我想看到0的? ** nz(Count(FormsList.FormTypeID),0)**? – 2013-03-19 12:41:12

+1

@AlinI如果你想看到所有的位置,那麼你將使用'LEFT JOIN',看看我的編輯 – Taryn 2013-03-19 12:49:50

+0

好了,做到了,現在我得到一個有趣的空第二列,標題爲「<>」。第二個想法是 – 2013-03-19 12:57:34