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,