代码之家  ›  专栏  ›  技术社区  ›  Laxmikant

如何根据Oracle中另一个表的值为一个表生成select查询

  •  0
  • Laxmikant  · 技术社区  · 6 年前

    表A的结构如下:

    col1 | col2 | col3 | col4 | col5 | ....
    

    表B只有一个包含许多列的条目,例如(仅取5):

    c1 c2 c3 c4 c5 ...
    -- -- -- -- --
     1  0  1  1  0 ...
    

    对于上述条目,查询将如下所示:

    select col1,
           col3,
           col4
    from A; 
    

    例2: 如果B中的条目如下所示

    c1 c2 c3 c4 c5 ...
    -- -- -- -- --
     0  0  1  1  0 ...
    

    对于上述条目,查询将如下所示:

    select col3,
           col4
    from A;
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Kaushik Nayak    6 年前

    UNPIVOT

    SELECT 
         'SELECT ' ||LISTAGG(
              CASE
                   WHEN col = 1 THEN val
              END,',') WITHIN GROUP(
              ORDER BY col
         ) ||' FROM A' as query
      FROM b UNPIVOT ( col
           FOR val
      IN ( c1 as 'COL1',
           c2 as 'COL2',
           c3 as 'COL3',
           c4 as 'COL4',
           c5 as 'COL5') );
    

    demo