比较行并计算同一行

时间:2015-05-15 10:04:01

标签: sql sql-server sql-server-2008 case

如果你看到2个Abc,那么计算总数就像9 * 2 = 18 第二行为15 * 2 = 30,就像那样

add Fun1    Fun2    Fun3
9   Abc     Wxy     Abc
15  def     Abc     Abc

2 个答案:

答案 0 :(得分:3)

一系列case表达式可以解决这个问题:

SELECT add * ((CASE Fun1 WHEN 'Abc' THEN 1 ELSE 0 END) + 
              (CASE Fun2 WHEN 'Abc' THEN 1 ELSE 0 END) + 
              (CASE Fun3 WHEN 'Abc' THEN 1 ELSE 0 END)) AS total
FROM   mytable

答案 1 :(得分:2)

使用addn代替addadd是SQL中的保留字

SELECT addn, Fun1, Fun2, Fun3, ((CASE Fun1 WHEN 'Abc' THEN 1 ELSE 0 END) + 
                                (CASE Fun2 WHEN 'Abc' THEN 1 ELSE 0 END) + 
                                (CASE Fun3 WHEN 'Abc' THEN 1 ELSE 0 END)) * addn AS result
FROM yourtable

输出:

addn    Fun1    Fun2    Fun3    result
9       Abc     Wxy     Abc     18
15      def     Abc     Abc     30

SQL小提琴:http://sqlfiddle.com/#!6/ec218/3/0