有一個客戶表。我想在一個查詢中列出活動狀態和非活動狀態。我怎樣才能做到這一點?複雜的SQL查詢
SELECT count(*) as ACTIVE,
count(*) as INACTIVE
FROM V_CUSTOMER
WHERE STATUS='a' AND STATUS='i'
有一個客戶表。我想在一個查詢中列出活動狀態和非活動狀態。我怎樣才能做到這一點?複雜的SQL查詢
SELECT count(*) as ACTIVE,
count(*) as INACTIVE
FROM V_CUSTOMER
WHERE STATUS='a' AND STATUS='i'
嘗試使用GROUP BY:
SELECT count(*), STATUS FROM V_CUSTOMER
Where STATUS='a' OR STATUS='d'
GROUP BY STATUS
+1:這是最好的答案 – 2010-07-13 06:23:32
這將計算所有recods active + deactive,但我認爲他需要分離計數active和deactive – 2010-07-13 06:35:33
@Jack - 此解決方案返回兩行,而Pranay提出的解決方案會給你一個單一的兩個計數,這是你要求的。 – APC 2010-07-13 06:46:32
我們可以使用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'
我認爲'case when'是sql server,而不是oracle? – 2010-07-13 06:32:43
@StefanSteinegger - 自8i以來,Oracle在SELECT語句中支持CASE(即超過十年) – APC 2010-07-13 06:42:44
我發現此鏈接:http://www.techonthenet.com/oracle/functions/case.php – 2010-07-13 06:43:00
我認爲你需要像這樣:
select Status, count(*) from V_Customer
where STATUS='a' or STATUS='d'
group by STATUS
這會給你的每個狀態的記錄數。
SELECT count(decode(status,'a',1)) as ACTIVE,
count(decode(status,'d',1)) as DEACTIVE
FROM V_CUSTOMER
WHERE STATUS='a' or STATUS='d'
想知道錯誤的答案獲得選擇? – 2010-07-13 06:47:11
我只需要一個查詢而不是一行。謝謝大家 – Jack 2010-07-13 07:16:16
似乎這個問題還不清楚 – 2010-07-13 07:42:49