将查询更改为 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 ALL
和CASE
表达式:
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;
我有这样的查询:
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 ALL
和CASE
表达式:
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;