一个很简单的sql语句问题 ,请朋友们帮忙!!

hotren_1999 2015-01-07 08:39:07
我有个统计到课人数的需求,有两个表,一个表里有两列,id和name,另一个表里两列,name和date,表1记录为(1,a),(2,b),(3,c),(4,d),表2统计点名记录,记录如下(a,周一),(b,周一),(a,周一),(c,周一),(a,周二),(c,周二),如何统计出周一到课次数为(a,2),(b,1),(c,1),(d,0)来呢?我就是不会把(d,0)统计出来。我的语句是"select 表1.name,count(表2.name) from 表1,表2 where 表2.name=表1.name and 表2.date=周一 group by 表1.id,表1.name ordey by 表1.id",问题重点是如何把(d,0)统计出来。
...全文
205 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hotren_1999 2015-01-12
  • 打赏
  • 举报
回复
总体思路正确,最后的语句为select a.name,b.total from 表1 a left join (select name,count(name) as total from 表2 where date='mon' group by name) b on a.name=b.name,谢谢大家的帮忙。
江南小鱼 2015-01-10
  • 打赏
  • 举报
回复
select  表1.name,count(表2.name) 
from 表1
left join 表2 on 表2.name=表1.name and 表2.date='周一'
group by 表1.name
还在加载中灬 2015-01-08
  • 打赏
  • 举报
回复
select  表1.name,count(表2.name)
from 表1 LEFT JOIN 表2 ON 表2.name=表1.name
where 表2.date='周一'
group by 表1.id,表1.NAME
order by 表1.id
在你的语句上,把JOIN改为Left Join就可以了,如果有错,就是你原本语句的错了 现在才发现你贴上来的语句都有问题 order写成了ordey~~ 还有你的,表2.date=周一,date是储存什么样的数据呢?周一不是常量 你还是把你原本能执行的语句,贴出来,我帮你改下 或者你把JOIN改为Left Join
hotren_1999 2015-01-08
  • 打赏
  • 举报
回复
不行啊,总提示有错误。
还在加载中灬 2015-01-07
  • 打赏
  • 举报
回复
select  表1.name,count(表2.name)
from 表1 LEFT JOIN 表2 ON 表2.name=表1.name
where 表2.date=周一
group by 表1.id,表1.NAME
ordey by 表1.id
LEFT JOIN 用左连接即可
Ginnnnnnnn 2015-01-07
  • 打赏
  • 举报
回复
USE tempdb
GO

CREATE TABLE #TB1
(
	ID INT,
	NAME VARCHAR(50)
)

CREATE TABLE #TB2
(
	NAME VARCHAR(50),
	[Date] VARCHAR(50)
)

INSERT INTO #TB1
        ( ID, NAME )
VALUES (1,'a'),(2,'b'),(3,'c'),(4,'d')

INSERT INTO #TB2
        ( NAME, Date )
VALUES  ('a','周一'),('b','周一'),('a','周一'),('c','周一'),('a','周二'),('c','周二')

SELECT a.NAME,COUNT(b.NAME)
	FROM #TB1 a
		LEFT JOIN #TB2 b ON a.NAME = b.NAME AND b.[Date] = '周一'	
	GROUP BY ALL a.NAME

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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