ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

表之间的数据匹配(生成交叉表)--sql

2021-11-28 17:02:35  阅读:154  来源: 互联网

标签:交叉 -- oc month course sql ELSE id SELECT


表之间的数据匹配(生成交叉表)--sql

创建表、添加数据

CREATE TABLE CourseMaster
(
	course_id int not null primary key,
	coures_name varchar(20)
);


CREATE TABLE OpenCourses
(
month int,
course_id int not null ,
CONSTRAINT fk_course_id FOREIGN KEY (course_id)
REFERENCES CourseMaster(course_id)
);


insert into CourseMaster(course_id,coures_name) 
values
(1,'会计入门 '),
(2,'财务知识 '),
(3,'簿记考试 '),
(4,'税务师 ');


insert into OpenCourses(month,course_id) 
values
(200706,1),
(200706,3),
(200706,1),
(200706,4),
(200707,4),
(200708,2),
(200708,4);

生成交叉表

我们要用这两张表来生成交叉表,以便于一目了然地知道每个月开设的课程。

使用 IN 谓词
-- 表的匹配 :使用 IN 谓词
SELECT coures_name AS 课程名,
	CASE WHEN course_id IN 
						(SELECT course_id FROM opencourses WHERE month = 200706) THEN 'o'
			 ELSE 'x' END AS "6月",
    CASE WHEN course_id IN
						(SELECT course_id FROM opencourses WHERE month = 200707) THEN 'o'
			 ELSE 'x' END AS "7月",
	CASE WHEN course_id IN
						(SELECT course_id FROM opencourses WHERE month = 200708) THEN 'o'
			 ELSE 'x' END AS "8月"
FROM coursemaster;

使用 EXISTS 谓词
-- 表的匹配 :使用 EXISTS 谓词
SELECT CM.coures_name AS 课程名,
	CASE WHEN EXISTS
				(SELECT course_id FROM opencourses oc WHERE month = 200706 AND oc.course_id=cm.course_id) THEN 'o' 
				ELSE 'x' END as "6月",
	CASE WHEN EXISTS
				(SELECT course_id FROM opencourses oc WHERE month = 200707 AND oc.course_id=cm.course_id) THEN 'o' 
			 	ELSE 'x' END as "7月",
	CASE WHEN EXISTS
				(SELECT course_id FROM opencourses oc WHERE month = 200708 AND oc.course_id=cm.course_id) THEN 'o' 
			 	ELSE 'x' END as "8月"
FROM coursemaster CM;

图例

标签:交叉,--,oc,month,course,sql,ELSE,id,SELECT
来源: https://www.cnblogs.com/d534/p/15615639.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有