Oracle SQL 查询以“金字塔格式”检索值?

问题描述 投票:0回答:1

请注意,我不知道这种“金字塔格式”是否有正式名称:我可能使用了不正确的约定。

我需要创建一个能够在此表中获取数据的 SQL 脚本。

pyramid

这个想法是优先考虑信息最多的记录。意思应该是:

  1. PCLITM
  2. 如果 PCLITM 为空,则为 PCPRODM。
  3. 如果 PCPRODM 为空,则为 PCPRODF。

...等等。

我试图避免的是进行多个 JOIN 来实现结果,所以我想联系一下,看看您是否知道更有效的选择。

这是模拟该表的示例 SQL。

WITH MAIN_TABLE AS (
    SELECT '112' MCU, '431' MPF, 9999 AN8, 'VAL001' PRODF, 'VAL002' PRODM, 'TEST-MR-001' LITM FROM DUAL UNION
    SELECT '112' MCU, '431' MPF, 9999 AN8, 'VAL001' PRODF, 'VAL002' PRODM, ' ' LITM FROM DUAL UNION
    SELECT '112' MCU, '431' MPF, 9999 AN8, 'VAL001' PRODF, ' ' PRODM, ' ' LITM FROM DUAL UNION SELECT '112' MCU, '431' MPF, 9999 AN8, ' ' PRODF, ' ' PRODM, ' ' LITM FROM DUAL UNION
    SELECT '112' MCU, '431' MPF, 0 AN8, ' ' PRODF, ' ' PRODM, ' ' LITM FROM DUAL UNION SELECT '112' MCU, ' ' MPF, 0 AN8, ' ' PRODF, ' ' PRODM, ' ' LITM FROM DUAL)
---- ---- ---- ---- ---- ---- ---- ----
SELECT * FROM MAIN_TABLE;
sql plsql oracle-sqldeveloper
1个回答
0
投票

您可以通过 ORDER BY 子句来控制它

SELECT * FROM MAIN_TABLE
ORDER BY MPF, AN8, PRODF, PRODM, LITM

小提琴

单片机 强积金 AN8 产品 产品DM LITM
112 0
112 431 0
112 431 9999
112 431 9999 VAL001
112 431 9999 VAL001 VAL002
112 431 9999 VAL001 VAL002 测试-MR-001
© www.soinside.com 2019 - 2024. All rights reserved.