数据库表外连接问题

usa007lhy 2011-05-13 06:14:32
请教各位大侠一个问题:我想查询个人县区孕妇数目的时候少了一个县,大家看看错误出在哪了。
现在是查询各县人数:

SELECT 行政区划.名称,行政区划.国际编码,
count(个人档案.档案编号) AS 人数
FROM 行政区划
LEFT OUTER JOIN 个人档案 on 行政区划.国际编码=LEFT(个人档案.档案编号,6)
WHERE LEN(行政区划.国际编码)=6
GROUP BY 行政区划.国际编码,行政区划.名称

结果显示 是正确的:
名称 国际编码 人数
新泰市 370982 0
泰山区 370902 18
宁阳县 370921 0
泰山景区 370904 3753
高新区 370911 0
岱岳区 370901 0
东平县 370923 0
肥城市 370983 675574

现在加上条件查询孕妇数目:

SELECT 行政区划.名称,行政区划.国际编码,行政区划.备注,
count(个人档案.档案编号) AS 人数
FROM 行政区划
LEFT OUTER JOIN 个人档案 on 行政区划.国际编码=LEFT(个人档案.档案编号,6)
WHERE LEN(行政区划.国际编码)=6 AND 个人档案.孕妇='1'
GROUP BY 行政区划.国际编码,行政区划.名称,dbo.行政区划.备注

结果显示:
名称 国际编码 人数
泰山景区 370904 28
肥城市 370983 1

我想显示全部的县,于是改动代码:

SELECT 行政区划.名称,行政区划.国际编码,行政区划.备注,
count(个人档案.档案编号) AS 人数
FROM 行政区划
LEFT OUTER JOIN 个人档案 on 行政区划.国际编码=LEFT(个人档案.档案编号,6)
WHERE LEN(行政区划.国际编码)=6 AND (个人档案.孕妇='1' OR 个人档案.档案编号 IS NULL)
GROUP BY 行政区划.国际编码,行政区划.名称,dbo.行政区划.备注


结果显示,还是少了一个县:
名称 国际编码 人数
岱岳区 370901 0
泰山景区 370904 28
高新区 370911 0
宁阳县 370921 0
东平县 370923 0
新泰市 370982 0
肥城市 370983 1

要怎么改动,才能正确显示全部县,以及各个县的孕妇数。
我的表
行政区划 主键是国家编码 长6位数字
个人档案 主键是档案编号 长10位,其前6位与所在县的国际编码相同
比如肥城人的档案编号是 3709830001 ,3709830002,3709830003。。。。

孕妇是个人档案一个选项 为bit字段。
...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
usa007lhy 2011-05-14
  • 打赏
  • 举报
回复
楼上的方法可行,但是不适用于我的情况。
我的dql语句其实还有很多,我现在简化了,我的还要连接一表,
那样用sum的话不正确,显示出来的数量偏多

我想改动where条件,实现查询,希望高手指点。
ForFumm 2011-05-13
  • 打赏
  • 举报
回复
SELECT 行政区划.名称,行政区划.国际编码,
count(个人档案.档案编号) AS 人数,
SUM( CASE WHEN [个人档案].[孕妇] = 1 THEN 1 ELSE 0 END ) AS '孕妇' FROM 行政区划
LEFT OUTER JOIN 个人档案 on 行政区划.国际编码=LEFT(个人档案.档案编号,6)
WHERE LEN(行政区划.国际编码)=6
GROUP BY 行政区划.国际编码,行政区划.名称
ForFumm 2011-05-13
  • 打赏
  • 举报
回复
SELECT 行政区划.名称,行政区划.国际编码,
count(个人档案.档案编号) AS 人数
SUM( CASE WHEN [个人档案].[孕妇] = 1 THEN 1 ELSE 0 END ) AS '孕妇'
FROM 行政区划
LEFT OUTER JOIN 个人档案 on 行政区划.国际编码=LEFT(个人档案.档案编号,6)
WHERE LEN(行政区划.国际编码)=6
GROUP BY 行政区划.国际编码,行政区划.名称

34,589

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧