我有一个交叉表查询,如下所示:
State Building 1 2 3 4 5
NY
SC
FL
我遇到的问题是我想要显示所有状态,无论是否有数据。所以,我需要一个左连接。不幸的是,当我在代码中替换Inner Join for Left Join时,没有任何改变。我只想弄清楚问题的来源,我认为这可能是以下原因之一:
查询不知道从哪里拉 (来自各州的价值观) 列出来查看,但这可能 不在它看的地方)
左连接在交叉表上不起作用 查询。
有人可以告诉我我做错了吗?
这是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)
理想情况下,我可以在上面的In语句中指定行值(当前指定列值为1-10),但我认为不能这样做。
答案 0 :(得分:1)
我没有完全得到你的例子,但是从你的评论“我想要显示所有状态,无论是否有数据”,我认为你想要一个“外部”加入。外部联接就是这样 - 它们包括数据,无论是否存在“匹配”。内部联接(默认)仅在匹配时包含数据。
希望这有帮助, 约翰
答案 1 :(得分: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)
答案 2 :(得分:0)
如果你的问题是表人口统计数据中有0行,状态='NY'(例如),但你想在结果中看到状态'NY',那么你需要另一个表格,例如拥有其中所有州的州,并将其作为您的驾驶表:
SELECT States.State
FROM States
LEFT OUTER JOIN Demographics ON Demographics.state = States.state
...
答案 3 :(得分:0)
你可以使用两步解决方案(它更具可读性)
首先将您的实际(和工作)sql语句作为视图包含在内
create view step1 as
TRANSFORM ....
SELECT ...
FROM ...
PIVOT ...
然后创建一个选择: (你需要像@Tony安德鲁斯那样的状态表)
select * -- or whatever
from state
left join step1 on state.id = step1.state
这就是