日期:2014-05-18  浏览次数:20563 次

如何获取同一张表,所共有的那个条数据!
SQL code

有这样一张数据表.
他们都共同有一个科目就是语文,我如何获取这个数据呢?
张三    语文    1
张三    数学    2
李四    语文    1
李四    物理    3
王五    语文    1
王五    外语    4 

而且这个表还有可能出现这样的情况
他们都共同有两个科目就是语文,数学,
我如何获取这个数据呢?
张三    语文    1
张三    数学    2
李四    语文    1
李四    数学    2
王五    语文    1
王五    数学    2
 
以上两种如何通过一种方式获取



------解决方案--------------------
select 科目 FROM 表 group by 科目 having count(人名)>=3 (不知道这个3,是能确定的不)
------解决方案--------------------
SQL code

select 科目
from tb
group by 科目
having count(distinct 姓名) = (select count(distinct 姓名) from tb)

------解决方案--------------------
SQL code

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
数学
语文

------解决方案--------------------
SQL code

--> 测试数据:[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
*/

------解决方案--------------------
SQL code

--> 测试数据:[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])
--那用楼上的。你的要求是每个人都要有相同的才查出来,我这个是只要有人是相同的就会查出来