Sql 如何编写提供所有三个条件的select查询?

Sql 如何编写提供所有三个条件的select查询?,sql,sql-server,Sql,Sql Server,我只想选择三个条件 ID ATTRID VALSTR 1771373 1 1234 1771373 3 510 1771373 7 2016 1771373 8 05 1777623 3 5003 1777623 7 2016 1777623 8 05 17781

我只想选择三个条件

   ID       ATTRID    VALSTR   
1771373       1         1234  
1771373       3         510 
1771373       7         2016
1771373       8         05
1777623       3         5003 
1777623       7         2016 
1777623       8         05
1778103       3         520
1778103       7         2016
1778103       8         06
我的查询是这样的,但查询返回所有ID

AttrId = 3 AND ValStr = 510 
AttrId = 7 AND ValStr = 2016
AttrId = 8 AND ValStr = 05

我想显示所有三个条件都提供的结果。以我为例,;我应该显示1771373身份证,但没有条件任何身份证。你能帮我吗

您可以使用HAVING子句

此查询将使用仅包含回答所有条件的
ID
的派生表:

SELECT *
FROM Table
WHERE ((AttrID = 3 AND ValStr ='510') OR
       (AttrID = 7 AND ValStr ='2016')  OR
       (AttrID = 8 AND ValStr ='05')
      ) AND
      DefID = 1375552
试试这个

SELECT t.* FROM YourTable t
INNER JOIN(SELECT s.Id FROM YourTable s
           WHERE (s.AttrID = 3 AND s.ValStr ='510') OR
                 (s.AttrID = 7 AND s.ValStr ='2016')  OR
                 (s.AttrID = 8 AND s.ValStr ='05')
           GROUP BY s.Id
           HAVING COUNT(distinct s.AttrID) = 3) t2
 ON(t.id = t2.id)

示例数据中的
DefId
在哪里?您能否根据示例数据提供预期的输出?我忘了为所有行键入相同的数据扫描您发布的查询结果?您以前没有问过这个问题吗?反正我也不工作你的质询现在@FikretSavaş是的,已经工作了非常感谢
select id from YourTable
where ((AttrID = 3 AND ValStr ='510') OR
       (AttrID = 7 AND ValStr ='2016')  OR
       (AttrID = 8 AND ValStr ='05')
      ) 
group by id having count(*)=3