2009-11-25 69 views
7

不知道到底該怎麼解釋這一點,但成像你有一個表,有很多像這樣的布爾字段的......在一個SQL查詢中計算大量布爾字段?

表:汽車

列:

自動:布爾

銀:布爾

美國:布爾

嘈雜:布爾

臭臭:布爾

快:布爾

(愚蠢的領域,其中大部分不會在現實中的bool,但只是一個例子)

我需要做的是產生這些字段的列表,每個搜索結果旁邊有若干搜索結果,因此如果數據庫中有100輛銀牌汽車和57輛美國汽車,則列表可能看起來有點像這樣...

自動:(150)

銀(100)

美國(57)

噪聲(120)

臭(124)

快(45)

所以,它基本上就像一個fi列表如果用戶點擊「銀色」,他們會縮小搜索範圍,只顯示銀色車輛,他們知道他們會得到100個結果。所有其他過濾器旁邊的數字會減少,因爲我們已經過濾掉所有不是銀質的汽車。

計數一場的出現次數會很容易....

SELECT COUNT(*)FROM CARS WHERE自動= TRUE;

...會給我第一行例如。但是我不想爲每個過濾器執行一條SQL語句,因爲它們可能超過30個。我看到很多網站都這樣做,所以它一定比我想象的要容易。

任何幫助真的會感謝:)

喬恩

回答

6

假設該位爲1/0,那麼你可以總結,而不是COUNT:

SELECT SUM(Automatic) as Automatic, SUM(Smelly) as Smelly, SUM(American) as Japanese FROM ... 
+0

聽起來很完美。謝謝。 – jonhobbs 2009-11-25 01:12:00

3

如果它尚未1/0 ,那麼,根據真實值是什麼,你可以這樣做:

Select 
    Sum(Case When Automatic = truevalue Then 1 Else 0 End) as Automatic, 
    Sum(Case When Smelly = truevalue Then 1 Else 0 End) as Smelly, 
    Sum(Case When American = truevalue Then 1 Else 0 End) as American, 
    Sum(Case When Noisy = truevalue Then 1 Else 0 End) as Noisy 
    From Table 
12

隨着sql server 2008 whe ñ試圖總結數據類型位字段以下錯誤ocures:

消息8117,級別16,狀態1,行10

操作數數據類型位是 和操作無效。

,所以你可以試試這個:

SELECT SUM(CAST(Automatic AS TINYINT)) as Automatic, SUM(CAST(Smelly AS TINYINT)) as Smelly, SUM(CAST(American AS TINYINT)) as Japanese FROM YourTable