2010-07-13 252 views
2

有一個客戶表。我想在一個查詢中列出活動狀態和非活動狀態。我怎樣才能做到這一點?複雜的SQL查詢

SELECT count(*) as ACTIVE, 
count(*) as INACTIVE 
FROM V_CUSTOMER 
WHERE STATUS='a' AND STATUS='i' 
+1

想知道錯誤的答案獲得選擇? – 2010-07-13 06:47:11

+0

我只需要一個查詢而不是一行。謝謝大家 – Jack 2010-07-13 07:16:16

+0

似乎這個問題還不清楚 – 2010-07-13 07:42:49

回答

4

嘗試使用GROUP BY:

SELECT count(*), STATUS FROM V_CUSTOMER 
Where STATUS='a' OR STATUS='d' 
GROUP BY STATUS 
+1

+1:這是最好的答案 – 2010-07-13 06:23:32

+1

這將計算所有recods active + deactive,但我認爲他需要分離計數active和deactive – 2010-07-13 06:35:33

+2

@Jack - 此解決方案返回兩行,而Pranay提出的解決方案會給你一個單一的兩個計數,這是你要求的。 – APC 2010-07-13 06:46:32

5

我們可以使用CASE語句狀態的兩個值翻譯:

SELECT 
    sum(case when STATUS = 'a' then 1 else 0 end) as ACTIVE 
    , sum(case when STATUS = 'd' then 1 else 0 end) as DEACTIVE 
FROM V_CUSTOMER 

沒有必要爲一個WHERE子句,除非有大量其他值爲STATUS的記錄,在這種情況下使用OR而不是AND

WHERE STATUS='a' OR STATUS='d'   
+0

我認爲'case when'是sql server,而不是oracle? – 2010-07-13 06:32:43

+0

@StefanSteinegger - 自8i以來,Oracle在SELECT語句中支持CASE(即超過十年) – APC 2010-07-13 06:42:44

+0

我發現此鏈接:http://www.techonthenet.com/oracle/functions/case.php – 2010-07-13 06:43:00

1

我認爲你需要像這樣:

select Status, count(*) from V_Customer 
where STATUS='a' or STATUS='d' 
group by STATUS 

這會給你的每個狀態的記錄數。

3
SELECT count(decode(status,'a',1)) as ACTIVE, 
count(decode(status,'d',1)) as DEACTIVE 
FROM V_CUSTOMER 
WHERE STATUS='a' or STATUS='d'