我试图确定是否可以在SQL中做一些事情来为用户创建视图,并且我需要创建一列来说明行号是“打开”还是“关闭”。问题在于确定该值的过程是基于源表中其他列的多个因素/值。查看视图当前生成的一些数据。
Line # Req_Qty Rej_Qty Adj_Qty Alt_Qty Shipped Cxl Rec Conf
Line 1 71.00 0.00 100.00 0.00 100.00 0.00 100.00 100.00
Line 2 23.00 0.00 0.00 0.00 23.00 0.00 0.00 0.00
Line 3 11.00 0.00 10.00 0.00 10.00 0.00 0.00 0.00
Line 4 12.00 12.00 0.00 0.00 0.00 0.00 0.00 0.00
Line 5 0.00 0.00 0.00 20.00 20.00 0.00 0.00 0.00
在上面的表格中,确定方法如下: 如果Adj_Qty中的任何值均大于0,则Adj_Qty(已调整数量)实际上将成为Req_Qty(请求数量)。如果Req_Qty和Adj_Qty均为0并且Alt_Qty> 0,则现在成为实际的Req_数量。所以基本上,我的第一个比较是Adj-> Req-> Alt。无论数量多少,都将减少Rej_Qty(已拒绝)或Cxl_Qty(已取消),从而产生余额。
最后,如果Rec或Conf列中的数量与该余额匹配,则行#将关闭。因此,对于表,第1行和第4行将关闭,第2行,第3行和第5行将打开。有什么方法可以在SQL中创建一个字段/列,该字段/列可以根据这种逻辑类型分配“打开”或“关闭”?
答案 0 :(得分:1)
您可以使用CASE
子句来计算视图中的余额和状态。例如:
create view v as
select *,
case when (
case when adj_qty > 0 then adj_qty
when req_qty > 0 then req_qty
when alt_qty > 0 then alt_qty
else 0.0
end
- rej_qty
- cxl_qty
) in (rec, conf) then 'closed'
else 'open' end as status
from t
我可能不了解您特定逻辑的所有详细信息,但是此查询应该非常接近您的需求。根据需要进行调整。