SQL - 如何在只返回一行的同时检查一列的多个值?

时间:2013-04-09 03:12:50

标签: sql sql-server reporting-services

如果这个问题措辞怪异,我很抱歉。

我正在写一份报告,我有一张包含这样字段的表格....

      applicationID statusid statuscreationdate

      123                  1  3-18-2013
      123                  2  3-27-2013
      124                  1  3-29-2013
      125                  1  4-1-2013
      125                  2  4-3-2013

我只想返回statusid为1的行但是我还想检查每个applicationid是否存在statusid 2。因此,上表中的所需查询将产生:

     123 3-18-2013
     125 4-1-2013

任何帮助将不胜感激。如果需要更多信息,请告诉我。我希望尽可能简短,简洁,同时包含必要的信息量。

感谢您的时间。

编辑:更正了所需的结果部分

2 个答案:

答案 0 :(得分:5)

此问题称为Relational Division

SELECT  applicationID, MAX(statuscreationdate) date
FROM    TableName
WHERE   statusID IN (1, 2)             -- list of statusID 
GROUP   BY applicationID 
HAVING  COUNT(DISTINCT statusID) = 2   -- no of statusID 

答案 1 :(得分:3)

 Select * From TableName t
 Where statusID = 1
    And Exists(Select * From tablename
               Where applicationID = t.applicationID 
                  And statusID = 2)