日期:2014-05-18 浏览次数:20579 次
有这样一张数据表. 他们都共同有一个科目就是语文,我如何获取这个数据呢? 张三 语文 1 张三 数学 2 李四 语文 1 李四 物理 3 王五 语文 1 王五 外语 4 而且这个表还有可能出现这样的情况 他们都共同有两个科目就是语文,数学, 我如何获取这个数据呢? 张三 语文 1 张三 数学 2 李四 语文 1 李四 数学 2 王五 语文 1 王五 数学 2 以上两种如何通过一种方式获取
select 科目 from tb group by 科目 having count(distinct 姓名) = (select count(distinct 姓名) from tb)
------解决方案--------------------
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba') BEGIN DROP TABLE tba END GO CREATE TABLE tba ( name VARCHAR(100), subject VARCHAR(100), subjectid INT ) GO INSERT INTO tba SELECT '张三', '语文', 1 UNION SELECT '张三', '数学', 2 UNION SELECT '李四', '语文', 1 UNION SELECT '李四', '数学', 2 UNION SELECT '王五', '语文', 1 UNION SELECT '王五', '数学', 2 GO SELECT subject FROM tba GROUP BY subject HAVING COUNT(1) = (SELECT COUNT(distinct name) FROM tba) subject 数学 语文
------解决方案--------------------
--> 测试数据:[test] if object_id('[test]') is not null drop table [test] create table [test]([name] varchar(4),[course] varchar(4),[value] int) insert [test] select '张三','语文',1 union all select '张三','数学',2 union all select '李四','语文',1 union all select '李四','物理',3 union all select '王五','语文',1 union all select '王五','外语',4 select * from test a where exists(select 1 from test b where a.name<>b.name and a.course=b.course) /* name course value ----------------------------- 张三 语文 1 李四 语文 1 王五 语文 1 */ --> 测试数据:[tbl] if object_id('[tbl]') is not null drop table [tbl] create table [tbl]([name] varchar(4),[course] varchar(4),[value] int) insert [tbl] select '张三','语文',1 union all select '张三','数学',2 union all select '李四','语文',1 union all select '李四','数学',2 union all select '王五','语文',1 union all select '王五','数学',2 select * from [tbl] a where exists(select 1 from [tbl] b where a.name<>b.name and a.course=b.course) /* name course value 张三 语文 1 张三 数学 2 李四 语文 1 李四 数学 2 王五 语文 1 王五 数学 2 */
------解决方案--------------------
--> 测试数据:[test] if object_id('[test]') is not null drop table [test] create table [test]([name] varchar(4),[course] varchar(4),[value] int) insert [test] select '张三','外语',1 union all select '张三','物理',2 union all select '李四','语文',1 union all select '李四','数学',2 union all select '王五','语文',1 union all select '王五','数学',2 select [course] from [test] group by [course] having count(distinct [name])=(select count(distinct [name]) from [test]) --那用楼上的。你的要求是每个人都要有相同的才查出来,我这个是只要有人是相同的就会查出来