我有一个这样的表:
-----------------------------------------------------------------
| ID | ItemName | OldValue | newValue | OrderId | sequenceNo
-----------------------------------------------------------------
| 1 | Item1 | 1 | 1.5 | SO2 | 6
| 2 | Item2 | 4 | 6 | SO2 | 4
| 3 | Item3 | 3 | 68 | SO2 | 9
------------------------------------------------------------------
我必须写一个查询,其中OldValue列数据应该像下面的例子一样作为新行
ItemName | allValues |OrderId | sequenceNo
----------------------------------------------
Item1 | 1 | SO2 | 0
Item2 | 4 | SO2 | 0
Item3 | 3 | SO2 | 0
Item1 | 1.5 | SO2 | 6
Item2 | 6 | SO2 | 4
Item3 | 68 | SO2 | 9
-----------------------------------------------
我使用了一个UNION,在这里我写了
select itemName , oldValue as allValues , OrderId from Orderdetails
UNION
select itemName , newValue as allValues , OrderId from Orderdetails
有没有更好的方法不用UNION来写这个?
可以使用VALUES子句来执行UNPIVOT
select t.itemname,
u.allvalues,
t.orderid,
u.sequenceno
from the_table t
cross join lateral (
values (oldvalue, 0), (newvalue, t.sequenceno)
) as u(allvalues, sequenceno)
order by t.itemname;