话说 当在MySQL 中 操作两个表 返回一个记录集 当其中一个是从表并且为LOG的时候

enderboy520 2010-11-22 10:12:59
现有表A 考试表

考试编号 考试名称
1 星期一的考试
2 星期二的考试

表B 考试日志表

日志编号 考试编号 日志类型
1 1 查看
2 1 查看
3 1 申请
4 2 查看
5 2 申请
6 2 申请

我想写一条语句 结果如这样

考试编号 考试名称 查看人数 申请人数
1 星期一的考试 3 3
...全文
121 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
enderboy520 2010-11-22
  • 打赏
  • 举报
回复
我想我明白 我是错在哪里了

两位谢谢了
case 语法不熟悉
去补习先

再次感谢
dawugui 2010-11-22
  • 打赏
  • 举报
回复
--确实结果不对。
create table A([考试编号] int,[考试名称] varchar(12))
insert A
select 1,'星期一的考试' union all
select 2,'星期二的考试'

create table b([日志编号] int,[考试编号] int,[日志类型] varchar(4))
insert b
select 1,1,'查看' union all
select 2,1,'查看' union all
select 3,1,'申请' union all
select 4,2,'查看' union all
select 5,2,'申请' union all
select 6,2,'申请'

select a.考试编号,
a.考试名称,
sum(case b.日志类型 when '查看' then 1 else 0 end) [查看人数],
sum(case b.日志类型 when '申请' then 1 else 0 end) [申请人数]
from a , b
where a.考试编号 = b.考试编号
group by a.考试编号, a.考试名称
order by a.考试编号, a.考试名称

drop table a , b

/*
考试编号 考试名称 查看人数 申请人数
----------- ------------ ----------- -----------
1 星期一的考试 2 1
2 星期二的考试 1 2

(所影响的行数为 2 行)
*/
dawugui 2010-11-22
  • 打赏
  • 举报
回复
select a.考试编号,
a.考试名称,
sum(case b.日志类型 when '查看' else 0 end) [查看人数],
sum(case b.日志类型 when '申请' else 0 end) [申请人数]
from a , b
where a.考试编号 = b.考试编号
group by a.考试编号, a.考试名称
王向飞 2010-11-22
  • 打赏
  • 举报
回复
-->*******************************************************
-->Microsoft SQL Server Management Studio Complete 2008***
-->AUTHOR : Mr wang **********
-->CREATE TIME : 2010-11-22 10:14:56 **************
-->*******************************************************
--> 测试数据:考试表
if object_id('考试表') is not null
drop table 考试表
GO
---->建表
create table 考试表([考试编号] int,[考试名称] varchar(12))
insert 考试表
select 1,'星期一的考试' union all
select 2,'星期二的考试'
--> 测试数据:考试日志表
if object_id('考试日志表') is not null
drop table 考试日志表
GO
---->建表
create table 考试日志表([日志编号] int,[考试编号] int,[日志类型] varchar(4))
insert 考试日志表
select 1,1,'查看' union all
select 2,1,'查看' union all
select 3,1,'申请' union all
select 4,2,'查看' union all
select 5,2,'申请' union all
select 6,2,'申请'

GO

--> 查询结果
SELECT * FROM 考试表

--> 删除表格
--DROP TABLE 考试表
--GO

--> 查询结果
SELECT * FROM 考试日志表

--> 删除表格
--DROP TABLE 考试日志表


SELECT A.[考试编号],B.[考试名称],
SUM(CASE WHEN [日志类型] ='查看' THEN 1 ELSE 0 END) AS '查看人数',
SUM(CASE WHEN [日志类型] ='申请' THEN 1 ELSE 0 END)AS '申请人数'
FROM 考试日志表 A JOIN 考试表 B
ON A.考试编号=B.考试编号
GROUP BY A.[考试编号],B.[考试名称]
你的结果不对吧?
enderboy520 2010-11-22
  • 打赏
  • 举报
回复
我的语句 是这样
但是很明显 没写正确


select 考试编号,考试名称 ,count(Select 考试编号 from 考试日志 where 日志类型=申请) ,count(Select 考试编号 from 考试日志 where 日志类型=查看)from 考试表 left join 日志表
on 考试编号=考试编号
group by 考试编号,日志编号


22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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