如何在记录中返回具有给定值的字段计数?

时间:2019-03-19 19:57:54

标签: delphi firebird interbase ibexpert

我有一个包含以下字段的数据库表:

          ---------------------  
FIELDS :  | H1 | H2 | H3 | H4  
          ---------------------  
VALUES :  | A  | B  | A  | C   
          ---------------------  

对于给定的记录(行),我想计算值为A的字段数。例如,在上面的示例中,有两个值为A的字段,因此预期结果为:2

我该如何实现?

2 个答案:

答案 0 :(得分:0)

我正在尝试从数据库角度回答问题

您有一个包含一个或多个行的表,并且每一行在四列中都有一个“ A”或其他名称。对于给定的行(或许多行),您想要获得其中带有“ A”的列数。

正如一位评论者所指出的,您不能对字母求和,但可以检查一个值是否为您要查找的值,然后将出现的次数计为1或0。最后将那些值值并返回总和。

SELECT (CASE H1 WHEN 'A' THEN 1 ELSE 0 END) +
       (CASE H2 WHEN 'A' THEN 1 ELSE 0 END) +
       (CASE H3 WHEN 'A' THEN 1 ELSE 0 END) +
       (CASE H4 WHEN 'A' THEN 1 ELSE 0 END) AS number_of_a
FROM   name_of_your_table;

对于您的示例行,它将返回:

NUMBER_OF_A
===========
          2

如果您有多于一行的行,则每行将获得As的数量。

答案 1 :(得分:0)

我对此进行了测试,感谢您的帮助

 SELECT count(H1) + count(H2) + count(H3) + count(H4) + count(H5) + 
count(H6) + count(H7) + count(H8) as TOT
from Table T
where T.H1 = 'A' or T.H2 = 'A' or T.H3 = 'A' or T.H4 = 'A' 
or T.H5 = 'A' or T.H6 = 'A' or T.H7 = 'A' or T.H8 = 'A'
group by T.ID
order by 1 DESC 

其他解决方案...