Ms Sql:具有多个行标准的查询

时间:2016-04-12 14:55:29

标签: sql sql-server

我有一张桌子:

CREATE TABLE Cl 
(
  PropId int, 
  ClId int
);
INSERT INTO Cl
(PropId, ClId)
VALUES
(1, 1),
(1, 2),
(1, 3),
(2, 1),
(2, 2),
(3, 1),
(4, 1),
(4, 2),
(5, 1),
(5, 2);

PropId  ClId
1        1
1        2
1        3
2        1
2        2
3        1
4        1
4        2
5        1
5        2

我想构建一个返回的查询:

PropId
2
4
5

当我处于“WHERE”状态时,我只有PropId = 2。表连接必须通过ClId值。提前致谢。 sqlfiddle

2 个答案:

答案 0 :(得分:0)

您可以使用group byhaving。这是一种方法:

select propid
from c1
group by propid
having sum(case when clid = 1 then 1 else 0 end) > 0 and
       sum(case when clid = 2 then 1 else 0 end) > 0 and
       count(distinct clid) = 2;

答案 1 :(得分:0)

关于问题的评论:

  

(...)我的PropId中只有2个,首先我必须转到CliId   价值并根据它们(价值观及其分割)来实现   我的PropId输出。 (...)

如果segmentation表示一组计数等于或大于1的记录,则需要以这种方式连接数据:

SELECT C.PropId 
FROM Cl C INNER JOIN (
    SELECT B.ClId 
    FROM Cl B
    WHERE B.PropId = 2
    ) D ON D.Clid = C.Clid
GROUP BY C.PropID
HAVING COUNT(c.ClId )>1

注意:结果将是:{1, 2, 4, 5}。为什么? 因为D子查询返回ClId{1, 2}集合,并且有4条PropId条记录符合条件。