2009-11-25 45 views
7

Không chắc chắn chính xác làm thế nào để giải thích điều này, nhưng hình ảnh bạn có một bảng với rất nhiều lĩnh vực boolean như thế này ......Đếm cho nhiều trường boolean trong một truy vấn sql?

Bảng: Ô tô

Cột:

tự động: boolean

Bạc: boolean

Mỹ: boolean

ồn ào: boolean

mùi: boolean

nhanh: boolean

(lĩnh vực ngớ ngẩn và hầu hết trong số họ sẽ không được bools trong thực tế nhưng chỉ là ví dụ)

Những gì tôi cần làm là tạo danh sách các trường này với một số kết quả tìm kiếm bên cạnh mỗi trường, vì vậy nếu có 100 xe ô tô bạc trong cơ sở dữ liệu và 57 xe ô tô của Mỹ, danh sách có thể trông giống như thế này ...

tự động: (150)

Bạc (100)

Mỹ (57)

ồn ào (120)

mùi (124)

nhanh (45)

Vì vậy, về cơ bản nó giống như một danh sách của fi lters, nếu người dùng nhấp vào "bạc", họ sẽ thu hẹp tìm kiếm xuống để chỉ hiển thị những chiếc xe màu bạc và họ biết rằng họ sẽ nhận được 100 kết quả. Các con số bên cạnh tất cả các bộ lọc khác sau đó sẽ giảm vì chúng tôi đã lọc ra tất cả các xe không phải là bạc.

Đếm lần xuất hiện của một lĩnh vực sẽ dễ dàng ....

SELECT COUNT (*) FROM CARS ĐÂU Automatic = true;

... sẽ cho tôi hàng đầu tiên chẳng hạn. Nhưng tôi không muốn phải thực hiện một câu lệnh SQL cho mỗi bộ lọc vì có thể có hơn 30 bộ lọc. Tôi đã nhìn thấy rất nhiều trang web làm điều này vì vậy nó phải được dễ dàng hơn tôi nghĩ rằng nó được.

Bất kỳ trợ giúp sẽ thực sự được đánh giá cao :)

Jon

Trả lời

6

Giả sử các bit là 1/0 thì bạn có thể thay Sum COUNT:

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

Âm thanh hoàn hảo. Cảm ơn. – jonhobbs

3

Nếu nó chưa được 1/0 , sau đó, dựa trên bất kỳ điều kiện nào là, bạn có thể thực hiện việc này:

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

Với máy chủ sql 2008 whe n cố gắng tổng hợp một lĩnh vực kiểu dữ liệu bit ocures lỗi sau:

Msg 8117, Level 16, State 1, Line 10

Operand kiểu dữ liệu bit là không hợp lệ cho nhà điều hành sum.

để bạn có thể thử điều này:

SELECT SUM(CAST(Automatic AS TINYINT)) as Automatic, SUM(CAST(Smelly AS TINYINT)) as Smelly, SUM(CAST(American AS TINYINT)) as Japanese FROM YourTable 
Các vấn đề liên quan