具体适用于仅过滤特定列的情况

时间:2014-05-24 18:25:14

标签: sql sql-server tsql

以下是我的查询

select  p.result ,
      (case when p.parameterID = 'AVA' then sum(p.Result) else 0 end) as [AVA],
      (case parameterId when '2D' then sum(p.Result) else 0 end) [2D], 
      (case parameterId when 'Sd' then sum(p.Result) else 0 end ) [Sd]      
  FROM  Table1 p 
   WHERE p.parameterID 
        in ('AVA', '2D', 'Sd') and p.ResultNo=-1
       and  ( p.result * 10000 < 1.0 )  
           group by 
          p.result,  p.parameterID

我在上面查询我正在使用的where子句(p.result * 10000&lt; 1.0)并为每个值(p.result * 10000&lt; 1.0)评估它 我的要求是更改此查询,它应仅适用于[AVA] p.result * 10000&lt; 1.0

我想在where子句(p.result * 10000&lt; 1.0)应该应用/仅检查列[AVA]它不应该适用于所有列。

2 个答案:

答案 0 :(得分:2)

试试这个:

WHERE p.parameterID 
        in ('AVA', '2D', 'Sd') and p.ResultNo=-1
       and 
       (
            ( p.parameterID  = 'AVA' AND p.result * 10000 < 1.0 )  OR ( p.parameterID  <> 'AVA' )
        ) 
           group by 
          p.result,  p.parameterID

答案 1 :(得分:0)

我更换了解决方案(例如当p.parameterID =&#39; AVA&#39;然后sum(p.Result),否则0结束)为[AVA],下面的行(p.ParameterId =&的情况) #39; AVA&#39;然后求和(CASE当(p.resultvalue * 1)&lt; 1.0然后p.resultvalue else 0 end)else 0 END)as [AVA]并删除(p.result * 10000&lt; 1.0)来自where子句