日期:2014-05-18 浏览次数:20684 次
有这样一张数据表. 他们都共同有一个科目就是语文,我如何获取这个数据呢? 张三 语文 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])
--那用楼上的。你的要求是每个人都要有相同的才查出来,我这个是只要有人是相同的就会查出来