将查询更改为 return 分类输出

change the query to return categorized output

我有这样的查询:

select * from my_table;

结果如下:

name       x1    x2    x3
----       ---- ---   ---
data       -2    3      -1

我想更改查询以将正负输出分成单独的行,结果更改为:

name       x1    x2    x3
----       ---- ---   ---
data       -2    3      -1
data       -2    null   -1
data       null  3      null

如果你的查询比较复杂,你可以把它放入一个子查询分解(WITH)子句中,然后使用UNION ALLCASE表达式:

WITH your_query (name, x1, x2, x3) AS (
  select * from my_table
)
SELECT *
FROM   your_query
UNION ALL
SELECT name,
       CASE WHEN x1 < 0 THEN x1 END,
       CASE WHEN x2 < 0 THEN x2 END,
       CASE WHEN x3 < 0 THEN x3 END
FROM   your_query
UNION ALL
SELECT name,
       CASE WHEN x1 >= 0 THEN x1 END,
       CASE WHEN x2 >= 0 THEN x2 END,
       CASE WHEN x3 >= 0 THEN x3 END
FROM   your_query;
   SELECT *
    FROM   my_Table
    SELECT name,
           CASE WHEN x1 < 0 THEN x1 else Null END,
           CASE WHEN x2 < 0 THEN x2 else Null END,
           CASE WHEN x3 < 0 THEN x3 else Null END
    FROM   my_Table
    UNION ALL
    SELECT name,
           CASE WHEN x1 >= 0 THEN x1 else Null END,
           CASE WHEN x2 >= 0 THEN x2 else Null END,
           CASE WHEN x3 >= 0 THEN x3 else Null END
    FROM   my_Table;