当前位置: 代码迷 >> Sql Server >> 急求,case when then和group by联合使用的有关问题
  详细解决方案

急求,case when then和group by联合使用的有关问题

热度:73   发布时间:2016-04-24 19:23:16.0
急求,case when then和group by联合使用的问题
NoInSt_Amt=case 
                         when  a.IsClear=1 then 
                            0
                         else
                           (select sum(case  when m.Ac_Qty > 0 and m.Qty > m.Ac_Qty then
                                               (m.Fc_Tot / m.Qty) * (m.Qty - m.Ac_Qty)
                                         when m.Ac_Qty = 0 then
                                                m.Fc_Tot
                                         else 0
                                      end )
                               from PoOrdD m where a.OrderM_Id = m.OrderM_Id
                            )
                       end,

如代码所示:我在此查询中使用了case when then,现在问题是,我在后面使用group by时,由于when  a.IsClear=1 then这句没有在聚合函数中,所以会报错,但是IsClear字段为bit类型,无法使用聚合函数,因此不知道该怎么解决,求各位大神指教。还有一个问题就是,为什么a.OrderM_Id也会报错,这个只是在where条件中啊,我不想根据a.OrderM_Id去分组

------解决方案--------------------
try this,

NoInSt_Amt=case when max(a.IsClear)=1 then 0
                else
                 (select sum(case when m.Ac_Qty>0 and m.Qty > m.Ac_Qty 
                                    then (m.Fc_Tot/m.Qty)*(m.Qty-m.Ac_Qty)
                                  when m.Ac_Qty = 0 
                                    then m.Fc_Tot
                                    else 0 end)
                  from PoOrdD m 
                  where a.OrderM_Id=m.OrderM_Id) end,
  相关解决方案