给定两个表,我想匹配表二中字符串特定位置的值,以便我可以看到一个学生有多少产品:
表1:
项目 | id |
---|---|
苹果 | 3 |
香蕉 | 4 |
胡萝卜 | 1 |
橘子 | 5 |
葡萄 | 2 |
甜瓜 | 6 |
苹果二代 | 7 |
表2:
学生 | 物品 |
---|---|
亚当 | 'XXX12X5' |
伊娃 | 'X3XX16X' |
(将 X 视为空格)
预期结果是根据table2和table1列出项目数量:
A 栏 | 苹果 | 香蕉 | 胡萝卜 | 橘子 | 葡萄 | 甜瓜 | 苹果二代 |
---|---|---|---|---|---|---|---|
亚当 | 1 | 2 | 5 | ||||
伊娃 | 1 | 3 | 6 |
目前我使用子字符串一一检查生成,但我想按程序列出所有项目(我只添加了 7 个项目来简化问题,真实表有数千个字符长的字符串)
使用此 SQL,您可以连接数据:
WITH
TABLE1(items, id) AS (VALUES ('apple', 3), ('banana', 4),
('carrot' , 1),
('tangerine', 5),
('grape', 2),
('melon', 6),
('apple II', 7)
),
TABLE2(student, items) AS (VALUES ('Adam', 'XXX12X5'), ('Eva', 'X3XX16X'))
SELECT student, table1.items, replace(substr(table2.items, id, 1), 'X', '') FROM TABLE2 JOIN TABLE1 ON 1 =1 ;
这将是结果:
STUDENT ITEMS 00003
Adam apple
Eva apple
Adam banana 1
Eva banana
Adam carrot
Eva carrot
Adam tangerine 2
Eva tangerine 1
Adam grape
Eva grape 3
Adam melon
Eva melon 6
Adam apple II 5
Eva apple II
现在您只需根据需要从垂直转换为水平