对Oracle的棘手观点

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)

使用上表中的数据.我怎么能这样做?

谢谢!

Jan*_*cki 9

以下是如何使用一个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)

替代文字

  • @ninesided的道具鼓励我与令人费解的UNPIVOT语法图进行斗争.值得努力. (2认同)

Ada*_*ter 1

这非常简单,只需编写 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因为您知道不会有任何重复。