我有一个查询,该查询选择5列(d,p,名称,val1,val2):
SELECT
table.bd AS d,
g.p AS p,
g.name || '_' || g.class || '_' || g.gname AS name,
(CASE
WHEN
table.type = 'D'
THEN
table.b
ELSE
0
END) AS VAL1,
(CASE
WHEN
table.type = 'S'
THEN
table.b
ELSE
0
END) AS VAL2
我需要将我的行分成2个单独的行。两行都将具有前3列,但其中一列将仅包含val1列,另一行将包含val2列。
例如,如果我的查询返回一行:
d p name val1 val2
'val' 25 'john' 450 90
我需要:
d p name val1
'val' 25 'john' 450
d p name val2
'val' 25 'john' 90
有没有办法做到这一点?
答案 0 :(得分:0)
集合运算符(UNION / UNION ALL)应该可以解决问题。无法完整查看数据的结构,但可以使用以下内容:
SELECT d, p, name, val1 FROM table
UNION ALL
select d, p , name, val2 FROM table;
如果在val1 = val2的情况下不需要重复的结果,请使用UNION而不是UNION ALL。
SELECT d, p, name, val1 FROM table
UNION
select d, p , name, val2 FROM table;
但是,由于它将是val1和val2的单列,因此它的名称将为val1,因为它来自第一个select语句,因此结果将为:
d p name val1
'val' 25 'john' 450
'val' 25 'john' 90