2016-05-11 100 views
0

我试图建立其过滤基于其他行的行的查询同一个表行作为在下面的示例中SQL查询过滤使用子查询,其查询

TableA 

Id status  type  date 
300 approved  ACTIVE 11/12/2015 10:00:00 
300 approved  ACTIVE 11/12/2015 10:10:00 
300 approved  INACTIVE 11/12/2015 11:00:00 
200 approved  ACTIVE 11/12/2015 11:10:00 
200 approved  INACTIVE 11/12/2015 11:10:00 
100 approved  ACTIVE 11/12/2015 11:10:00 

从上面的表格我想返回具有相同数量ACTIVE和INACTIVE类型的Id,比如Id 300有两行ACTIVE类型和一行INACTIVE类型,所以Id 300应该从我的结果中排除,其中200有1个活动和1个不活动,它应该是包含在结果中

在上述表格状态中,类型也可以有其他值,但我只关心上面列出的其他值,忽略其他值

因此,对于查询的表A的最终结果将是

Id 
200 

我试图运行下面的查询,但是那没有给我我希望的结果

SELECT Id 
FROM TableA oa 
WHERE oa.type in('ACTIVE','INACTIVE') 
and oa.status='APPROVED' 
and not EXISTS(SELECT 
      x.id 
      ,COUNT(*) 
     FROM (SELECT DISTINCT 
       id 
       ,c.type 
      FROM TableA c 
      WHERE 
      AND c.type IN ('ACTIVE','INACTIVE') 
      AND c.status = 'APPROVED' 
      AND c.Id= ta.Id 
      )x 
     GROUP BY x.Id 
     HAVING COUNT(*) = 1) 

,在上面的查询被纠正以获得所需的结果?

回答

3

你只需要使用SUMHAVING

SELECT Id 
FROM TableA 
WHERE 
    status = 'approved' 
    AND type In ('ACTIVE', 'INACTIVE') 
GROUP BY Id 
HAVING 
    SUM(CASE WHEN type = 'ACTIVE' THEN 1 ELSE 0 END) = 
    SUM(CASE WHEN type = 'INACTIVE' THEN 1 ELSE 0 END) 
+0

谢谢你,怎么办编辑查询也包括在案件ID时有效S比非活性更大? – DoIt

+0

将最后一个“=”更改为“>” – kmoser

+0

使用> =包括两者。 – PhillipXT