ToX*_*inE 2 sql sql-server sql-server-2000 rows
我有一张桌子:
create table a (page int, pro int)
go
insert into a select 1, 2
insert into a select 4, 2
insert into a select 5, 2
insert into a select 9, 2
insert into a select 1, 3
insert into a select 2, 3
insert into a select 3, 3
insert into a select 4, 3
insert into a select 9, 3
insert into a select 1, 4
insert into a select 9, 4
insert into a select 12, 4
insert into a select 1, 5
insert into a select 9, 5
insert into a select 12, 5
insert into a select 13, 5
insert into a select 14, 5
insert into a select 15, 5
go
Run Code Online (Sandbox Code Playgroud)
(这是我开始写的这个表的SQLfiddle和查询)
我想从这个表中为每个列"pro" 提取公共列 "页面".这是我们所期望的:
1
9
Run Code Online (Sandbox Code Playgroud)
我试着用:
SELECT DISTINCT a.page
FROM a
WHERE a.page IN (
SELECT b.page FROM a as b
WHERE b.pro <> a.pro
)
Run Code Online (Sandbox Code Playgroud)
但是这个查询返回的每个"页面" 至少有一个不是我们需要的公共值.见下文 :
1
4
9
12
Run Code Online (Sandbox Code Playgroud)
相反的查询也称为至少一个但不是所有时间的不同值
我想要提取链接到一个或多个"专业人士"的"页面",但不是所有人共同的(这与前一个查询完全相反)
这是我们所期望的:
2
3
4
5
12
13
14
15
Run Code Online (Sandbox Code Playgroud)
我无法找到解决这两个问题的解决方案:'(有人可以帮我解决这些问题吗?
最好的祝福
编辑:SQLfiddle网址
只是有点反向思考 - 分组page并计算pro每个的不同值.返回与不同pro值的总和匹配的行
SELECT [page]
FROM a
GROUP BY [page]
HAVING COUNT(DISTINCT pro) = (SELECT COUNT(DISTINCT pro) FROM a)
Run Code Online (Sandbox Code Playgroud)
编辑:对于第二个问题,只需=在最后一行中用'<' 替换- > SQLFiddle