两张表的查询,求指点!!!!!!

添加一个昵称 2013-01-08 04:22:45
本人非数据库专业
查询的东西很简单

有两张表
a b
单号,姓名。。。 单号,姓名。。。

两张表单号都是唯一的,不会重复,也不会互相重复
姓名是会重复,b有的人a肯定会有,a有的b一定会有

要查询出
姓名,count(a.单号) 正常单数,isnull(count(b.单号),0) 异常单数
group by 姓名
就比说有查询出姓名为小王在a表中有143条记录,在b中有21条记录,小丽在a表中有76条,b中有0条
那么查询出的结果就是
小王,143,21
小丽,76,0

求select语句啊!!

关键是要语句的效率,因为数据比较大,所以求专业人事指点!!!!
...全文
264 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
哥眼神纯洁不 2013-01-08
  • 打赏
  • 举报
回复
引用 12 楼 wo747100016 的回复:
引用 10 楼 sc273607742 的回复:convert(decimal(10,4),isnull(b.num,0)/(a.num*1.0)) 囧,抱歉,刚结贴以为你跟上面回答我那个是同一个人,直接把分给了,不好意思,也很感谢你
我只是做补充,也学学他人的想法
szm341 2013-01-08
  • 打赏
  • 举报
回复
引用 12 楼 wo747100016 的回复:
引用 10 楼 sc273607742 的回复:convert(decimal(10,4),isnull(b.num,0)/(a.num*1.0)) 囧,抱歉,刚结贴以为你跟上面回答我那个是同一个人,直接把分给了,不好意思,也很感谢你
添加一个昵称 2013-01-08
  • 打赏
  • 举报
回复
引用 10 楼 sc273607742 的回复:
convert(decimal(10,4),isnull(b.num,0)/(a.num*1.0))
囧,抱歉,刚结贴以为你跟上面回答我那个是同一个人,直接把分给了,不好意思,也很感谢你
添加一个昵称 2013-01-08
  • 打赏
  • 举报
回复
引用 8 楼 szm341 的回复:
引用 6 楼 wo747100016 的回复: 引用 2 楼 szm341 的回复:select 姓名,a.num as 正常单数,isnull(b.num,0) 异常单数 from (select 姓名,count(*)as num from a group by 姓名 )a left join (select 姓名,count(*)as num from b group by 姓名……
嗯,一看就明白了,那怎么只保留4位小数
哥眼神纯洁不 2013-01-08
  • 打赏
  • 举报
回复
convert(decimal(10,4),isnull(b.num,0)/(a.num*1.0))
添加一个昵称 2013-01-08
  • 打赏
  • 举报
回复
引用 7 楼 sc273607742 的回复:
引用 5 楼 wo747100016 的回复: 我去试试看。 isnull(b.num,0)/(a.num*1.0)
哦。。类型的问题是吧?那我想保留4位小数怎么弄?
szm341 2013-01-08
  • 打赏
  • 举报
回复
引用 6 楼 wo747100016 的回复:
引用 2 楼 szm341 的回复:select 姓名,a.num as 正常单数,isnull(b.num,0) 异常单数 from (select 姓名,count(*)as num from a group by 姓名 )a left join (select 姓名,count(*)as num from b group by 姓名)b on a.姓名=……
整数运算结果都是整数, 可以加一个小数进行隐式转换isnull(b.num,0)/(a.num*1.0) 也可以显示转换isnull(b.num,0)/convert(decimal(10,2),a.num)
哥眼神纯洁不 2013-01-08
  • 打赏
  • 举报
回复
引用 5 楼 wo747100016 的回复:
我去试试看。
isnull(b.num,0)/(a.num*1.0)
添加一个昵称 2013-01-08
  • 打赏
  • 举报
回复
引用 2 楼 szm341 的回复:
select 姓名,a.num as 正常单数,isnull(b.num,0) 异常单数 from (select 姓名,count(*)as num from a group by 姓名 )a left join (select 姓名,count(*)as num from b group by 姓名)b on a.姓名=b.姓名
在多问一下,我想在后面加一列:isnull(b.num,0)/a.num 正异比例 这列的值都是0啊,怎么办?
添加一个昵称 2013-01-08
  • 打赏
  • 举报
回复
我去试试看。
添加一个昵称 2013-01-08
  • 打赏
  • 举报
回复
引用 2 楼 szm341 的回复:
select 姓名,a.num as 正常单数,isnull(b.num,0) 异常单数 from (select 姓名,count(*)as num from a group by 姓名 )a left join (select 姓名,count(*)as num from b group by 姓名)b on a.姓名=b.姓名
(select 姓名,count(*)as num from a group by 姓名 )原来还可以这样生成表来查询啊,学习了!
qqqqqqqq_2013 2013-01-08
  • 打赏
  • 举报
回复
引用 2 楼 szm341 的回复:
select 姓名,a.num as 正常单数,isnull(b.num,0) 异常单数 from (select 姓名,count(*)as num from a group by 姓名 )a left join (select 姓名,count(*)as num from b group by 姓名)b on a.姓名=b.姓名
+1
szm341 2013-01-08
  • 打赏
  • 举报
回复
select 姓名,a.num as 正常单数,isnull(b.num,0) 异常单数 from (select 姓名,count(*)as num from a group by 姓名 )a left join (select 姓名,count(*)as num from b group by 姓名)b on a.姓名=b.姓名
發糞塗牆 2013-01-08
  • 打赏
  • 举报
回复
搞几条数据来看看。

34,590

社区成员

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

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