在一个sql查询中计算很多布尔字段?

jon*_*bbs 7 sql t-sql sql-server sql-server-2005

不确定如何解释这个但是想象你有一个包含许多布尔字段的表......

表:汽车

列:

自动:布尔值

银色:布尔值

美国人:布尔

吵:布尔

臭臭:布尔

fast:布尔值

(愚蠢的田地,其中大部分都不会在现实中沸腾,只是一个例子)

我需要做的是生成这些字段的列表,每个字段旁边有一些搜索结果,所以如果数据库中有100辆银色汽车和57辆美国汽车,那么列表可能看起来有点像......

自动:(150)

银(100)

美国人(57)

吵闹(120)

臭臭(124)

快(45)

因此,它基本上就像一个过滤器列表,如果用户点击"白银",他们会缩小搜索范围,只显示银色汽车,他们知道他们将得到100个结果.然后,所有其他过滤器旁边的数字将减少,因为我们已经过滤掉所有非银色的汽车.

计算一个场的出现很容易......

SELECT COUNT(*)FROM CARS WHERE Automatic = true;

......例如,我会给第一行.但是我不想为每个过滤器做一个SQL语句,因为它们可能超过30个.我已经看到很多网站这样做,所以它必须比我想象的要容易.

任何帮助真的很感激:)

乔恩

Mos*_*azi 12

使用sql server 2008尝试对数据类型的字段进行求和时,会出现以下错误:

Msg 8117,Level 16,State 1,Line 10

操作数数据类型位对于sum运算符无效.

所以你可以尝试这个:

SELECT SUM(CAST(Automatic AS TINYINT)) as Automatic, SUM(CAST(Smelly AS TINYINT)) as Smelly, SUM(CAST(American AS TINYINT)) as Japanese FROM YourTable
Run Code Online (Sandbox Code Playgroud)


Rem*_*anu 6

假设该位为1/0,则可以使用SUM而不是COUNT:

SELECT SUM(Automatic) as Automatic, SUM(Smelly) as Smelly, SUM(American) as Japanese FROM ...
Run Code Online (Sandbox Code Playgroud)