mae*_*sto 5 sql oracle union view
我有一个表"价格"列:
year, janprc, janqty, febprc, febqty ...
Run Code Online (Sandbox Code Playgroud)
(一年中所有月份的价格和数量)
我需要的是创建一个视图"monthlyprices"与列:
year, month, price, quantity
Run Code Online (Sandbox Code Playgroud)
使用上表中的数据.我怎么能这样做?
谢谢!
以下是如何使用一个UNPIVOT语句而不使用UNION.
with t as (
select 2008 year, 1 janprc, 500 janqty, 1 febprc, 600 febqty from dual
union
select 2009, 50, 1000, 20, 3000 from dual
union
select 2010, 60, 1000, 25, 3000 from dual
)
SELECT *
FROM t
UNPIVOT (
(price, quantity) FOR month IN
(
(janprc, janqty) AS 'jan',
(febprc, febqty) AS 'feb'
)
)
order by
year, month
;
Run Code Online (Sandbox Code Playgroud)

这非常简单,只需编写 12 个子查询并将UNION它们的结果组合在一起即可:
CREATE VIEW MONTHLYPRICES AS
SELECT
year AS year,
'January' AS month,
janprc AS price,
janqty AS quantity
FROM
PRICES
UNION ALL
SELECT
year AS year,
'February' AS month,
febprc AS price,
febqty AS quantity
FROM
PRICES
UNION ALL
SELECT
year AS year,
'March' AS month,
marprc AS price,
marqty AS quantity
FROM
PRICES
UNION ALL
... and so on ...
Run Code Online (Sandbox Code Playgroud)
您可以使用,UNION ALL因为您知道不会有任何重复。