我有一个“订单表”。在“订单表”中,有一个多用途的列,称为“单位”。
OrderCode,ProductCode,ProductName,Unit,ProductId 123、002, Box No, 1、1111 123、223344,Abc,4、11873993 123、888444 ,Zxc,1、66447433 123、883372,Ubn,2、88575744 123、002 , Box No, 2,1111 123,788665,Muq,3,88887777 123,900223 ,Zue,1,22234567 123,665543,Erv,1,12399998
对于“框”,“单位”列的值从1到N为特定值,其中ProductID = 1111。另外,“单位”列还具有其他ProductID的单位值 。
每个订单均以ProductID = 1111开始,第一个框号= 1(在“单位”字段中显示)以下产品位于同一框中,直到下一个ProductID = 1111,然后框号= N(在“单位”字段中显示)
单位字段显示除ProductID = 1111以外的产品数量
我试过了:
CASE WHEN ProductId = 1111 THEN Unit END AS BoxNo
但这是行不通的。
我想添加一个新列“ BoxNo”,其中包含每个产品的箱号
OrderCode, BoxNo,产品代码,产品名称,单元,产品编号 123, 空,002,盒号,1,1111 123, 1,223344,ABC,如图4所示,11873993 123, 1,888444,ZXC,1,66474833 123, 1,883372 ,UBN,2,88575744 123, 空,002,盒号,2,1111 123, 2,788665,Muq,3,88887777 123 2, 900223, Zue, 1, 22234567 123, 2, 665543, Erv, 1, 12399998
您的结果似乎假设在表中排序。SQL表表示无序集。您需要一列来指定顺序。
使用这样的列,您可以使用窗口函数和逻辑来执行此操作case
:
select t.*,
(case when ProductId <> 1111
then count(*) filter (where ProductId = 1111) over (order by <ordering col>)
end) as box_num
from t;
这将统计到每一行的1111数。
编辑:
在SQL Server中,您将使用SUM(CASE)
:
select t.*,
(case when ProductId <> 1111
then sum(case when ProductId = 1111 then 1 else 0 end) over (order by <ordering col>)
end) as box_num
from t;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句