2011-06-29 36 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 

这就是全部