我有一个如下的SQL表:
item | subitem | stage | id |
-----------------------------------------------
i1 | s1 | picked | 1 |
i1 | s2 | shipped | 1 |
i2 | s4 | picked | 2 |
i3 | s10 | shipped | 2 |
i3 | s11 | eligible | 0 |
i4 | s2 |not eligible| 0 |
i1 | s1 | picked | 3 |
i1 | s2 | picked | 3 |
我希望输出如下:
item1|subitem1|item2|subitem2|pair_volume|item1pick|item1ship|item2pick|item2ship|
----------------------------------------------------------------------------------
i1 | s1 | i1 | s2 | 2 | 2 | 0 | 2 | 1 |
i1 | s1 | i2 | s4 | 1 |1 | 0 | 1 | 1 |
....
.....
....
本质上,我想在这里做的是以下事情:
我想首先将item, subitem
与自身进行交叉联接,因此我拥有item1
,subitem1
和item2
,{{1}的所有可能组合}。
这是定义阶段的方式。如果一个阶段是合格的,那么它就是合格的,而如果选择了一个阶段,则意味着该项目既是合格的又是被选择的。如果运送了一个阶段,则意味着该物品是合格的,已拣配并已运送。仅提及最后一个阶段。
现在,对于每对subitem2
,我要计算该对发生的item1, subitem1 - item2, subitem2
会话的数量,并在id
中具有阶段,并在(eligible, shipped, picked)
中填充值。例如,pair_volume
对出现两次(在(i1,s1)-(i1,s2)
1中发生一次,在id
3中发生一次),并且在这两个id
会话中,该对中的两个项目均为{{ 1}}(从id
和eligible
隐含)阶段。在这对符合条件的货币对发生的2次中,item1提货了多少次,item2提货了多少,item1发货了,item2发货了几次?这就是我要解决的问题。
我可以做得很好,直到交叉加入为止。但是我不知道如何将值插入到交叉联接表中。任何帮助深表感谢!
这是我到目前为止所拥有的:
picked
直到交叉连接的查询都可以正常工作。但是我不知道如何进一步计算额外的列。非常感谢任何帮助,谢谢!