2016-05-11 98 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