代码之家  ›  专栏  ›  技术社区  ›  Logan Wlv

SQL Oracle将列转换为对列\名称/值

  •  1
  • Logan Wlv  · 技术社区  · 6 年前

    基本上我有这个测试台:

    dog         cat          snake
    ------------------------------
     5           7             7
     9           8             5
     1           3             7
    

    我想用一个SQL请求将其转换为:

        column_name           value
        ---------------------------
         dog                    5
         cat                    7
         snake                  7
         dog                    9
          ..                    ..
    

    我不知道我可以用哪一个OracleSQL函数来实现这一点,我听说了Pivot,但我不知道在这种情况下它是如何工作的。

    2 回复  |  直到 6 年前
        1
  •  4
  •   MT0    6 年前

    UNPIVOT

    SQL Fiddle

    CREATE TABLE table_name (dog, cat, snake) AS
    SELECT 5, 7, 7 FROM DUAL UNION ALL
    SELECT 9, 8, 5 FROM DUAL UNION ALL
    SELECT 1, 3, 7 FROM DUAL;
    

    SELECT *
    FROM   table_name
    UNPIVOT(
      value FOR column_name IN ( dog, cat, snake )
    )
    

    Results

    | COLUMN_NAME | VALUE |
    |-------------|-------|
    |         DOG |     5 |
    |         CAT |     7 |
    |       SNAKE |     7 |
    |         DOG |     9 |
    |         CAT |     8 |
    |       SNAKE |     5 |
    |         DOG |     1 |
    |         CAT |     3 |
    |       SNAKE |     7 |
    
        2
  •  0
  •   Yogesh Sharma    6 年前

    union all

    select 'dog' as col, dog
    from table t
    union all
    select 'cat', cat
    from table t
    union all
    select 'snake', snake
    from table t;