不确定如何解释这个但是想象你有一个包含许多布尔字段的表......就像这样......
表:汽车
列:
自动:布尔值
Silver:boolean
American:boolean
吵闹:布尔
臭臭:布尔
fast:boolean
(愚蠢的田地,其中大部分都不会在现实中起作用,只是一个例子)
我需要做的是生成这些字段的列表,每个字段旁边都有一些搜索结果,所以如果数据库中有100辆银色车和57辆美国车,那么列表可能看起来有点像这样。
自动:(150)
银(100)
美国人(57)
吵闹(120)
臭臭(124)
快(45)
所以,它基本上就像一个过滤器列表,如果用户点击“银色”,他们会缩小搜索范围,只显示银色汽车,他们知道他们将得到100个结果。然后,所有其他过滤器旁边的数字将减少,因为我们已经过滤掉所有不是白银的汽车。
计算一个字段的出现很容易......
SELECT COUNT(*)FROM CARS WHERE Automatic = true;
...会给我第一行例如。但是我不想为每个过滤器做一个SQL语句,因为它们可能超过30个。我已经看到很多网站这样做,所以它必须比我想象的要容易。
真的很感激任何帮助:)
乔恩
答案 0 :(得分:12)
使用sql server 2008尝试对数据类型的字段进行求和时,会出现以下错误:
Msg 8117,Level 16,State 1,Line 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
答案 1 :(得分:6)
假设该位为1/0,则可以使用SUM而不是COUNT:
SELECT SUM(Automatic) as Automatic, SUM(Smelly) as Smelly, SUM(American) as Japanese FROM ...
答案 2 :(得分:4)
如果它不是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