请注意,我不知道这种“金字塔格式”是否有正式名称:我可能使用了不正确的约定。
我需要创建一个能够从此表中获取数据的 SQL 脚本。
这个想法是在进行 JOIN 时优先考虑信息最多的记录。意思应该是:
...等等。
我需要从配置表中提取结果值 VAL,但总需要有一个结果,这意味着非精确匹配是可以接受的。
以表 DOCO 10003 为例:最佳匹配是 MCU 112、MPF 431 和 AN8 9999 的组合,而 PRODF、PRODM 和 LITM 为空。
我试图避免的是进行多个 JOIN 来实现结果,所以我想联系一下,看看您是否知道更有效的选择。
这是模拟两个表的示例 SQL。
WITH PYRAMID_TABLE AS (
SELECT '112' MCU, '431' MPF, 9999 AN8, 'VAL001' PRODF, 'VAL002' PRODM, 'TEST-MR-001' LITM, 'Value001' VAL FROM DUAL UNION
SELECT '112' MCU, '431' MPF, 9999 AN8, 'VAL001' PRODF, 'VAL002' PRODM, ' ' LITM, 'Value002' FROM DUAL UNION
SELECT '112' MCU, '431' MPF, 9999 AN8, 'VAL001' PRODF, ' ' PRODM, ' ' LITM, 'Value003' FROM DUAL UNION
SELECT '112' MCU, '431' MPF, 9999 AN8, ' ' PRODF, ' ' PRODM, ' ' LITM, 'Value004' FROM DUAL UNION
SELECT '112' MCU, '431' MPF, 0 AN8, ' ' PRODF, ' ' PRODM, ' ' LITM, 'Value005' FROM DUAL UNION
SELECT '112' MCU, ' ' MPF, 0 AN8, ' ' PRODF, ' ' PRODM, ' ' LITM, 'Value006' FROM DUAL),
TRANSACTION_TABLE AS (
SELECT 10001 DOCO, '112' MCU, '431' MPF, 9999 AN8, 'VAL001' PRODF, 'VAL002' PRODM, 'TEST-MR-001' LITM, 'Value001' Fetch_result FROM DUAL UNION
SELECT 10002 DOCO, '112' MCU, '431' MPF, 9999 AN8, 'VAL001' PRODF, 'VAL003' PRODM, 'TEST-MR-098' LITM, 'Value003' FROM DUAL UNION
SELECT 10003 DOCO, '112' MCU, '431' MPF, 9999 AN8, 'VAL014' PRODF, 'VAL055' PRODM, 'TEST-MR-005' LITM, 'Value004' FROM DUAL UNION
SELECT 10004 DOCO, '112' MCU, '431' MPF, 9999 AN8, 'VAL012' PRODF, 'VAL050' PRODM, 'TEST-MR-023' LITM, 'Value004' FROM DUAL UNION
SELECT 10005 DOCO, '112' MCU, '345' MPF, 1293 AN8, 'STK001' PRODF, 'STK067' PRODM, 'TEST-MR-004' LITM, 'Value006' FROM DUAL)
---- ---- ---- ---- ---- ---- ---- ----
SELECT * FROM TRANSACTION_TABLE;
--SELECT * FROM PYRAMID_TABLE;
编辑 1:只是澄清一下:目的不是排序这个金字塔,使其如图所示,而是能够在两个表之间进行提取。对于任何误解,我们深表歉意。
您可以通过 ORDER BY 子句来控制它
SELECT *
FROM MAIN_TABLE
ORDER BY coalesce(LITM,' ') desc,
coalesce(PRODM,' ') desc,
coalesce(PRODF,' ') desc,
coalesce(AN8,0) desc,
coalesce(MPF,' ') desc
为了测试空格和 NULL 以相同的方式排序(空白-空),我必须修改您的示例。我将具有 5 个值的记录的空间更改为 NULL 112 431 9999 VAL001 VAL002 空
单片机 | 强积金 | AN8 | 产品 | 产品DM | LITM |
---|---|---|---|---|---|
112 | 431 | 9999 | VAL001 | VAL002 | 测试-MR-001 |
112 | 431 | 9999 | VAL001 | VAL002 | NULL |
112 | 431 | 9999 | VAL001 | ||
112 | 431 | 9999 | |||
112 | 431 | 0 | |||
112 | 0 |