2012-07-09 17 views
-2

我知道如果它是一次性條件如何使其工作。我如何使它適用於多種條件?對於多個像這樣的SQL選擇計數

SELECT count(TableName.DeviceName where DeviceName like 'AR%') as DEVICE_Type_A, 
     count(TableName.DeviceName where DeviceName like 'R%') as DEVICE_Type_B, 
     count(TableName.DeviceName where DeviceName like 'P%') as DEVICE_Type_C, 
     count(TableName.DeviceName where DeviceName like 'AM%') as DEVICE_Type_D, 
    FROM DB.TableName TableName 
WHERE TableName.DURATIONMIN > '180' 
+1

什麼是你的問題? – Jesse 2012-07-09 18:31:40

+0

那麼,你的問題確實沒有詳細說明你想要達到的目標? – rvphx 2012-07-09 18:32:35

回答

6

您應該使用case語句!

SELECT count(case when DeviceName like 'AR%' then 1 end) as DEVICE_Type_A, 
     count(case when DeviceName like 'R%' then 1 end) as DEVICE_Type_B, 
     count(case when DeviceName like 'P%' then 1 end) as DEVICE_Type_C, 
     count(case when DeviceName like 'AM%' then 1 end) as DEVICE_Type_D 
FROM DB.TableName TableName 
WHERE TableName.DURATIONMIN > '180' 

我離開了計數我個人認爲,「和」是清晰的:

SELECT sum(case when DeviceName like 'AR%' then 1 else 0 end) as DEVICE_Type_A, 
     sum(case when DeviceName like 'R%' then 1 else 0 end) as DEVICE_Type_B, 
     sum(case when DeviceName like 'P%' then 1 else 0 end) as DEVICE_Type_C, 
     sum(case when DeviceName like 'AM%' then 1 else 0 end) as DEVICE_Type_D 
FROM DB.TableName TableName 
WHERE TableName.DURATIONMIN > '180' 
+0

非常感謝你,如果你能回答的話,你就是救星,那就工作了,我有疑問爲什麼它沒有把tablename.column放在總括號裏)。 – Mowgli 2012-07-09 18:59:24

+1

當這些表是一個表時,別名是可選的。我只是刪除它,使SQL更具可讀性。在實踐中,你應該包括表別名,所以我承認這是不好的做法。但是,使別名與名稱相同是多餘的。相反,使用一些簡單的縮寫,例如「tn」,可以喚起「TableName」,而縮短很多。 – 2012-07-09 19:03:39

+0

謝謝,我將把它收回來,因爲我正在使用超過20個DB和超過1000個表的總數。 – Mowgli 2012-07-09 19:05:11

1

你應該使用子查詢:

SELECT 
    (SELECT count(*) form TableName.DeviceName where DeviceName like 'AR%') as DEVICE_Type_A, 
    (SELECT count(*) from TableName.DeviceName where DeviceName like 'R%') as DEVICE_Type_B, 
    (SELECT count(*) from TableName.DeviceName where DeviceName like 'P%') as DEVICE_Type_C, 
    (SELECT count(*) from TableName.DeviceName where DeviceName like 'AM%') as DEVICE_Type_D, 
FROM DB.TableName TableName 
WHERE TableName.DURATIONMIN > '180' 
+0

感謝您的幫助,但我得到這個錯誤「System.Data.OleDb.OleDbException:表不存在。ORA-00942:表或視圖不存在於」 – Mowgli 2012-07-09 18:43:45

+0

我不知道你的數據庫模式,在這個錯誤你沒有表格(例如錯字錯誤)。 – 2012-07-09 18:45:59

+0

我會用你幫助過的代碼來玩遊戲,再次感謝。 – Mowgli 2012-07-09 18:46:57