mysql - 交叉连接并将值插入到 SQL 中的表中
问题描述
我有一个如下的 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
,的所有可能组合subitem2
。
以下是阶段的定义方式。如果一个阶段是合格的,那么它就是合格的,而如果一个阶段被选中,则意味着该项目既符合条件又被选中。如果某个阶段已发货,则意味着该项目符合条件、已挑选并已发货。只提到了最后一个阶段。
现在,对于每一item1, subitem1 - item2, subitem2
对,我想计算id
这对发生并具有阶段的会话数,(eligible, shipped, picked)
并将值填充到pair_volume
. 例如,(i1,s1)-(i1,s2)
pair 出现两次(一次在id
1 中,一次在id
3 中),并且在这两个id
会话中,pair 中的两个项目都是eligible
(从picked
和暗示的shipped
)阶段。在这对符合条件的配对出现的 2 次中,item1 被拣选、item2 被拣选、item1 发货和 item2 发货了多少次?这就是我要解决的问题。
在交叉加入之前我可以做得很好。但我不知道如何将值插入到交叉连接表中。任何帮助深表感谢!
这是我到目前为止所拥有的:
select combination.item1, combination.subitem1, combination.item2,
combination.subitem2,
(
select tmp.item1, tmp.subitem1, tmp.item2, tmp.subitem2,
case when ((tmp.item1 = tmp.item2) and
(tmp.subitem1 = tmp.subitem2)) then 'TRUE' else
'FALSE' end as indicator from
(
select distinct item as item1, subitem as subitem2
from old
cross join
select distinct item as item2, subitem as subitem2
from old
) tmp
) combination
where combination.indicator = 'FALSE'
直到交叉连接的查询工作正常。但我不知道如何进一步计算额外的列。非常感谢任何帮助,谢谢!
解决方案
推荐阅读
- reactjs - TypeError:即使尚未调用组件,也无法读取未定义的属性“映射”
- assembly - 这个汇编 x86 代码有什么问题
- python - 验证它是否为字符串
- reactjs - 使用 React 的 API Axios 请求——在我的计算机上工作,但不在任何其他设备上
- google-apps-script - 应用程序脚本 - 根据剩余天数发送电子邮件 - 电子邮件内容第 1 次和第 2 次 - 无法在已发送电子邮件中并排显示列
- javascript - 为什么我的函数没有从最里面的 then()/catch() 承诺返回值?
- c++ - 如何检查 Openacc 是否运行良好?
- winapi - 我对 PE 文件重定位感到困惑
- python - 如何强制 tensorflow 和 Keras 在 GPU 上运行?
- python - Python 模拟异步对象 w。PyTest