关于sql server中表连接查询问题?

Wz_zero 2018-02-23 10:59:42
表A:City表 表B:Unit 表
ID Name ID Name CIty_ID(外键City表ID)
1 北京 1 医院 1
2 上海 2 学校 1
3 天津 3 公司 2
..... 4 医院 3
5 医院 2


通过上面两个表
我如何得出下面这个查询表

地区 医院数量 学校数量 公司数量
北京 1 1 0
上海 1 0 1
天津 1 0 0

拜托各位大佬,
...全文
768 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 2018-03-01
  • 打赏
  • 举报
回复
这个问题解决了请结贴,问新的问题再开新帖子问,不能一个帖子一直问吧。
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([省份] nvarchar(22),[地市] nvarchar(23),[医院] nvarchar(29),[病例] int,[死亡] int)
Insert #T
select N'安徽',N'黄山市',N'休宁县人民医院',1,0 union all
select N'安徽',N'六安市',N'霍邱县第一人民医院',1,0 union all
select N'安徽',N'芜湖市',N'芜湖市第二人民医院',3,0 union all
select N'北京',N'海淀区',N'北京大学第三医院',1,0 union all
select N'福建',N'福州市',N'长乐市第二医院',1,0 union all
select N'福建',N'福州市',N'福州市第一医院',1,0 union all
select N'福建',N'福州市',N'罗源县医院',4,0 union all
select N'福建',N'宁德市',N'蕉城区人民医院',6,0 union all
select N'福建',N'宁德市',N'宁德市闽东医院',4,0 union all
select N'福建',N'宁德市',N'宁德市医院',31,0 union all
select N'福建',N'宁德市',N'宁德市中医院',3,0 union all
select N'福建',N'宁德市',N'霞浦县医院',7,0 union all
select N'福建',N'泉州市',N'海都医院',1,0 union all
select N'福建',N'泉州市',N'惠安县医院',1,0 union all
select N'福建',N'厦门市',N'厦门市第三医院',2,0 union all
select N'福建',N'厦门市',N'厦门市海沧医院',1,0 union all
select N'福建',N'漳州市',N'东山县医院',1,0 union all
select N'福建',N'漳州市',N'云霄县医院',3,0 union all
select N'福建',N'漳州市',N'漳浦县医院',5,0
Go
--测试数据结束
SELECT 省份 ,
COUNT(DISTINCT 地市) AS 地市数量 ,
COUNT(1) AS 医院数量 ,
SUM(病例) AS 病例数量 ,
SUM(死亡) AS 死亡数量
FROM #T
GROUP BY 省份




Wz_zero 2018-03-01
  • 打赏
  • 举报
回复
大佬,我想向您请教这个问题: 安徽 黄山市 休宁县人民医院 1 0 安徽 六安市 霍邱县第一人民医院 1 0 安徽 芜湖市 芜湖市第二人民医院 3 0 北京 海淀区 北京大学第三医院 1 0 福建 福州市 长乐市第二医院 1 0 福建 福州市 福州市第一医院 1 0 福建 福州市 罗源县医院 4 0 福建 宁德市 蕉城区人民医院 6 0 福建 宁德市 宁德市闽东医院 4 0 福建 宁德市 宁德市医院 31 0 福建 宁德市 宁德市中医院 3 0 福建 宁德市 霞浦县医院 7 0 福建 泉州市 海都医院 1 0 福建 泉州市 惠安县医院 1 0 福建 厦门市 厦门市第三医院 2 0 福建 厦门市 厦门市海沧医院 1 0 福建 漳州市 东山县医院 1 0 福建 漳州市 云霄县医院 3 0 福建 漳州市 漳浦县医院 5 0 上面的这个结果,我如何才能将它显示为: 省份 地市数量 医院数量 病例数量 死亡数量 安徽 3 3 5 0 北京 1 1 1 0 福建 5 15 71 0 拜托大佬指教。
Wz_zero 2018-02-23
  • 打赏
  • 举报
回复
引用 7 楼 sinat_28984567 的回复:
[quote=引用 6 楼 Wz_zero 的回复:] 那这种带有百分比和比例呢? 比如:百分比和比例都是四舍五入保留两位小数的。 地区 学校 百分比(%) 大学 比例(%) 小学 比例(%) 北京 4 50.00 2 50.00 2 50.00 上海 1 12.50 1 100.00 0 0.00 天津 3 37.50 1 33.33 2 66.67 总计 8 100.00 4 50.00 4 50.00 拜托大佬了。
。。。。一次性都问完[/quote] 突然想到的,就突然的问了
二月十六 版主 2018-02-23
  • 打赏
  • 举报
回复
引用 6 楼 Wz_zero 的回复:
那这种带有百分比和比例呢? 比如:百分比和比例都是四舍五入保留两位小数的。 地区 学校 百分比(%) 大学 比例(%) 小学 比例(%) 北京 4 50.00 2 50.00 2 50.00 上海 1 12.50 1 100.00 0 0.00 天津 3 37.50 1 33.33 2 66.67 总计 8 100.00 4 50.00 4 50.00 拜托大佬了。
。。。。一次性都问完
Wz_zero 2018-02-23
  • 打赏
  • 举报
回复
那这种带有百分比和比例呢? 比如:百分比和比例都是四舍五入保留两位小数的。 地区 学校 百分比(%) 大学 比例(%) 小学 比例(%) 北京 4 50.00 2 50.00 2 50.00 上海 1 12.50 1 100.00 0 0.00 天津 3 37.50 1 33.33 2 66.67 总计 8 100.00 4 50.00 4 50.00 拜托大佬了。
二月十六 版主 2018-02-23
  • 打赏
  • 举报
回复
引用 4 楼 Wz_zero 的回复:
应该怎样去掉那个NULL 值
where xxx等级 is not null
Wz_zero 2018-02-23
  • 打赏
  • 举报
回复



应该怎样去掉那个NULL 值
二月十六 版主 2018-02-23
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#City') is null
drop table #City
Go
Create table #City([ID] int,[Name] nvarchar(22))
Insert #City
select 1,N'北京' union all
select 2,N'上海' union all
select 3,N'天津'
GO
if not object_id(N'Tempdb..#Unit') is null
drop table #Unit
Go
Create table #Unit([ID] int,[Name] nvarchar(22),[CIty_ID] int)
Insert #Unit
select 1,N'医院',1 union all
select 2,N'学校',1 union all
select 3,N'公司',2 union all
select 4,N'医院',3 union all
select 5,N'医院',2
Go
--测试数据结束
SELECT * FROM (
SELECT #City.Name AS 地区 ,
SUM(CASE WHEN #Unit.Name = '医院' THEN 1
ELSE 0
END) AS 医院数量 ,
SUM(CASE WHEN #Unit.Name = '学校' THEN 1
ELSE 0
END) AS 学校数量 ,
SUM(CASE WHEN #Unit.Name = '公司' THEN 1
ELSE 0
END) AS 公司数量 ,
COUNT(1) AS 合计
FROM #City
JOIN #Unit ON #City.ID = CIty_ID
GROUP BY #City.Name
UNION
SELECT '合计' ,
SUM(CASE WHEN #Unit.Name = '医院' THEN 1
ELSE 0
END) AS 医院数量 ,
SUM(CASE WHEN #Unit.Name = '学校' THEN 1
ELSE 0
END) AS 学校数量 ,
SUM(CASE WHEN #Unit.Name = '公司' THEN 1
ELSE 0
END) AS 公司数量 ,
COUNT(1) AS 合计
FROM #City
JOIN #Unit ON #City.ID = CIty_ID)t
ORDER BY 合计


Wz_zero 2018-02-23
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#City') is null
	drop table #City
Go
Create table #City([ID] int,[Name] nvarchar(22))
Insert #City
select 1,N'北京' union all
select 2,N'上海' union all
select 3,N'天津'
GO
if not object_id(N'Tempdb..#Unit') is null
	drop table #Unit
Go
Create table #Unit([ID] int,[Name] nvarchar(22),[CIty_ID] int)
Insert #Unit
select 1,N'医院',1 union all
select 2,N'学校',1 union all
select 3,N'公司',2 union all
select 4,N'医院',3 union all
select 5,N'医院',2
Go
--测试数据结束
SELECT  #City.Name AS 地区 ,
        SUM(CASE WHEN #Unit.Name = '医院' THEN 1
                 ELSE 0
            END) AS 医院数量 ,
        SUM(CASE WHEN #Unit.Name = '学校' THEN 1
                 ELSE 0
            END) AS 学校数量 ,
        SUM(CASE WHEN #Unit.Name = '公司' THEN 1
                 ELSE 0
            END) AS 公司数量
FROM    #City
        JOIN #Unit ON #City.ID = CIty_ID
		GROUP BY #City.Name
那如果要改成下面这种形式的,应该怎么弄? 地区 医院数量 学校数量 公司数量 合计 北京 1 1 0 2 上海 1 0 1 2 天津 1 0 0 1 合计 3 1 1 5
二月十六 版主 2018-02-23
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#City') is null
drop table #City
Go
Create table #City([ID] int,[Name] nvarchar(22))
Insert #City
select 1,N'北京' union all
select 2,N'上海' union all
select 3,N'天津'
GO
if not object_id(N'Tempdb..#Unit') is null
drop table #Unit
Go
Create table #Unit([ID] int,[Name] nvarchar(22),[CIty_ID] int)
Insert #Unit
select 1,N'医院',1 union all
select 2,N'学校',1 union all
select 3,N'公司',2 union all
select 4,N'医院',3 union all
select 5,N'医院',2
Go
--测试数据结束
SELECT #City.Name AS 地区 ,
SUM(CASE WHEN #Unit.Name = '医院' THEN 1
ELSE 0
END) AS 医院数量 ,
SUM(CASE WHEN #Unit.Name = '学校' THEN 1
ELSE 0
END) AS 学校数量 ,
SUM(CASE WHEN #Unit.Name = '公司' THEN 1
ELSE 0
END) AS 公司数量
FROM #City
JOIN #Unit ON #City.ID = CIty_ID
GROUP BY #City.Name


34,594

社区成员

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

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