在我的查询中,此字段由此语句生成
CASE WHEN T1.unitMsr='MT' then STR((T1.Quantity),12,5)
ELSE STR((T1.Quantity*T2.NumInSale),12,5)END as OrderQty,
isnull(str(sum(CASE WHEN TN.unitMsr = 'MT'
Then TN.Quantity ELSE TN.Quantity*T2.NumInSale END),8,5),'0.00000') as DO_Qty_MT,
在select语句结束之前,我想实现类似这样的东西
Case When DO_Qty_MT >= OrderQty Then 'Normal'
Else 'Abnormal' END
As 'Closing method'
我应该如何用适当的参考代替DO_Qty_MT和OrderQty?
答案 0 :(得分:0)
在我看来,您将订单设置为"异常"如果总订单数量小于任何订单行..
但只有在T1.Quantity
或T2.NumInSale
为NULL
或为负(OrderQty<0
时)时,才有可能实现这一点。
从您TN
表开始,您只需使用以下方法测试行:
-- get all rows with detailed information and Normal/Abnormal test..
select
*, Case When isnull(OrderQty, -1)<0 Then 'Abnormal' Else 'Normal' END As [Closing method]
from TN
如果只需要&#34;异常&#34; 行
,那就更简单了select *, 'Abnormal' As [Closing method]
from TN
where isnull(OrderQty, -1)<0
如果您只想在以前的查询中使用distinct YourOrderId
而不是*
提取包含异常行的订单。
-- get all orders with Normal/Abnormal test
select distinct OrderId,
Case When isnull(OrderQty, -1)<0 Then 'Abnormal' Else 'Normal' END As [Closing method]
from TN
-- get only Abnormal orders
select distinct OrderId, 'Abnormal' As [Closing method]
from TN
where isnull(OrderQty, -1)<0
答案 1 :(得分:0)
添加此类&#34;变量的典型方法&#34;是使用CTE或子查询。另一种方法是横向连接,SQL Server支持apply
关键字:
select . . ., v.OrderQty,
coalesce(str(sum(case when TN.unitMsr = 'MT'
then TN.Quantity
else TN.Quantity * T2.NumInSale
end), 8, 5
), '0.00000'
) as DO_Qty_MT,
from . . . outer apply
(values (case when T1.unitMsr = 'MT' then str(T1.Quantity, 12, 5)
else str(T1.Quantity * T2.NumInSale, 12, 5)
end)
) v(OrderQty)
这样可以更简单地进行计算链。
另外,我不明白你使用str()
的原因。 Decimal
/ numeric
似乎可以执行您想要的操作 - 并将值的表示形式保留为数字而不是字符串。