【发布时间】:2022-12-12 10:03:13
【问题描述】:
我有一个非常简单的 sql 查询,我在 DB2 I 系列 4 上运行,它只是执行一些简单的连接。问题是我的材料表有它,因此可以在每个作品上使用多种材料/颜色组合。现在我正在获取每个组合的行,但我想合并以便如果 test.materials.sequence 的值为 2 那么它会创建两个额外的列(如果组合没有序列 2 那么它只是 0 和0 在这些列中。
查询:
Select bod.code, mat.material, mat.mat_color,
from test.skus sk
inner join test.Bodies bod on sk.body_id = bod.id
inner join test.categories prc on prc.id = sk.category_id
inner join test.skus_to_materials stm on sk.id = stm.sku_id
inner join test.materials mat on stm.mat_id = mat.id
order by prc.desc;
表:
存货单位
id | code | body_id | category_id
-------------------------------------------
1 12345 9912 3
2. 12346 9913 3
身体
id | code
--------------------------
9912 1234-5
9913 1234-6
类别
id | category
------------------
3 Test
skus_to_materials
id | sku_id | mat_id | sequence
--------------------------------------
1 1 221 1
2 1 222 2
3 2 223 1
材料
id | material | mat_color
-------------------------------
221 Fabric black
222 Fabric white
223 Leather brown
这是我目前的结果:
code | material | mat_color
-------------------------
1234-5 | Fabric | black
1234-5 | Fabric | white
这是我想要的结果:
code | material1 | mat_color1 | material2 | mat_color2
----------------------------------------------------------
1234-5 Fabric black Fabric white
1234-6 Leather brown 0 0
查看 1234-6 如何只有一种材料组合,因此 material2 和 mat_color2 将为零。
有没有办法通过分组和行操作来实现这一点?
更新:
在回答查尔斯的回答时,我在一个案例中发现了一些数据更多的问题。按材料、颜色和描述分组后,我意识到我得到了丢失的记录,但现在遇到了这个问题:
code | material1 | color1 | material2 | color2
------------------------------------------------------------
1234-5 Fabric White 0 0
1234-5 0 0 Leather white
1234-5 Leather Brown 0 0
1234-5 Leather Tan 0 0
1234-6 Fabric Black 0 0
1234-6 0 0 Leather Black
1234-7 Fabric White 0 0
【问题讨论】:
-
这将从 dbfiddle 中获益匪浅
-
我认为 dbfiddle 不支持这种方言。
-
我有一个去这里 db-fiddle.com/f/u4zKAdw3H4hFLbfnzEeZS2/1@jmarkmurphy 它不支持 DB2 但当前查询适用于 db2 和 mysql