2011-06-29 39 views
0

我有一個看起來像這樣的交叉表查詢:SQL/Access - 左側加入問題,值從哪裏來?

State   Building  1   2   3   4   5 

NY 

SC 

FL 

我遇到的問題是,我想所有的狀態展現出來,無論是否有數據。所以,我需要一個左連接。不幸的是,當我用代碼中的Inner Join替代Left Join時,沒有任何變化。我只是試圖找出其中的問題是從哪裏來的,我認爲這可能是以下原因之一:

  1. 查詢不知道從哪裏拉 值(該狀態是在列出的所有 查找但這可能 不是在那裏的看)

  2. 左加入不交叉表查詢 上工作。

有人能告訴我我做錯了什麼嗎?

這裏的SQL:

TRANSFORM Nz(Count(Demographics.ID))+0 AS CountOfID 
SELECT Demographics.State 
FROM Research 
    INNER JOIN (Demographics 
     INNER JOIN [Status] 
      ON Demographics.ID=[Status].ID 
      ) 
     ON (Research.ID=Demographics.ID) 
     AND (Research.ID=[Status].ID) 
WHERE ((([Status].Building_Status)='Complete')) 
GROUP BY Demographics.State, 
      [Status].Building_Status 
PIVOT Research.Site In (1,2,3,4,5,6,7,8,9,10,11) 

理想情況下,我可以指定在聲明中上方的行值(這是目前指定列的值1-10),但我不認爲這是可以做到。

+2

向我們顯示您的查詢! –

+0

你能提供你試過的示例查詢嗎? –

+0

好吧,我剛剛發佈了SQL。對不起,我仍然不知道如何在SO上格式化代碼,看起來不錯。 – jerry

回答

1

我沒有完全明白你的例子,但是從你的評論「我希望所有的州顯示出來,不管是否有數據」,我想你想要一個「外部」加入。外連接就是這樣做的 - 無論是否存在「匹配」,它們都包含數據。內部連接(默認)僅在匹配時包含數據。

希望這有助於 約翰

+0

嘿,約翰,我在上面添加了一些SQL,實際上我有兩個內部聯接。我是否將外連接應用於兩者? – jerry

+0

對不起,我沒有太多時間,並且在不知道表格結構的情況下迅速告訴我們有點困難。但是如果你沒有得到狀態,嘗試改變「內部聯接(人口統計數據」爲「左外聯接(人口統計數據」......我認爲這將包括沒有匹配人口統計數據的狀態(人口統計數據在結果集中爲NULL) 。它應該讓你開始朝着正確的方向發展 – JohnD

+2

也可以在調試時刪除TRANSFORM,GROUP BY和PIVOT行以避免混淆,你可以從SELECT運行到WHERE以確保獲得然後再添加其他部分。 – JohnD

0

你應該改變這樣說:

TRANSFORM Nz(Count(Demographics.ID))+0 AS CountOfID 
    SELECT Demographics.State 
    FROM Demographics 
     LEFT JOIN (Research 
     LEFT JOIN [Status] 
       ON Demographics.ID=[Status].ID 
      ) 
      ON (Research.ID=Demographics.ID) 
      AND (Research.ID=[Status].ID) 
    WHERE ((([Status].Building_Status)='Complete')) 
GROUP BY Demographics.State, 
      [Status].Building_Status 
PIVOT Research.Site In (1,2,3,4,5,6,7,8,9,10,11) 
0

如果你的問題是,有可能與國家=「NY」表人口統計學0行(例如),但是你想在結果中看到狀態'NY',那麼你需要另一個表格,例如擁有所有狀態在裏面,各國使此驅動表:

SELECT States.State 
FROM States 
    LEFT OUTER JOIN Demographics ON Demographics.state = States.state 
... 
0

您可以使用兩個步驟的解決方案(這是更具可讀性)
第一附上您的實際(和工作)SQL statment作爲鑑於

create view step1 as 
TRANSFORM .... 
SELECT ... 
FROM ... 
PIVOT ... 

,然後創建一個選擇,如: (您需要一個狀態表像@Tony安德魯斯說)

select * -- or whatever 
from state 
left join step1 on state.id = step1.state 

這就是全部