【问题标题】:Need an SQL to create a View需要 SQL 来创建视图
【发布时间】:2015-01-26 00:35:55
【问题描述】:

我在 oracle 数据库中有一张这样的表:

   id | name      | value
   -----------------------
   1  | dog name  | ham
   1  | cat name  | miau
   1  | childs    | 1
   2  | dog name  | wham
   2  | cat name  | meow
   2  | childs    | 3

我想制作这样的视图:

 id  |  dog name | cat name | childs
------------------------------------
  1  |  ham      | miau     | 1
  2  |  wham     | meow     | 3

你能帮我用 sql 来做吗?

【问题讨论】:

  • 查看 here 在 Oracle 中如何进行数据透视。

标签: sql oracle sql-view


【解决方案1】:

使用这个查询:我无法连接到SQLfiddler。所以,请检查代码并告诉我它返回了什么。

select *
from
(
    SELECT id, name, value FROM table A)
    pivot
    (
        max(value) for name in ('dog name', 'cat name', 'childs')
    )
order by id

您可以从此处了解有关 PIVOT for oracle 的更多信息:link

【讨论】:

  • 这对 Oracle 无效([dog name] 是 SQL 中的无效标识符)
  • 查看here以了解正确的语法。
  • 更改了查询。重新检查一下。
  • 我写了 select * from (SELECT id, name, value FROM ELO_DOCUMENT_META) pivot (max(value) for name in ('ID_PL', 'CNPCUI')) order by id 但我得到一个 ORA -00933: SQL 命令没有正确结束
  • 这是一个旧的 Oracle 数据库。 PIVOT 适用于 Oracle >= 11g 的数据库。
【解决方案2】:
    CREATE TABLE #temp
    (
    id INT,
    name VARCHAR(20),
    value VARCHAR(10)

    )

    INSERT INTO #temp VALUES(  1,'dog name','ham')
    INSERT INTO #temp VALUES( 1,'cat name' ,'miau')
    INSERT INTO #temp VALUES(   1,'childs',' 1')
    INSERT INTO #temp VALUES(   2,'dog name','wham')
    INSERT INTO #temp VALUES(   2 ,'cat name','meow')
    INSERT INTO #temp VALUES(   2,'childs','3')



    SELECT * FROM #temp 

    PIVOT (MAX(value) FOR name IN ([dog name],[cat name],[childs])) AS PVT



     DROP TABLE #temp

解决办法是

   SELECT * FROM #temp 

    PIVOT (MAX(value) FOR name IN ([dog name],[cat name],[childs])) AS PVT

替换

"#temp" 加上你的表名

【讨论】:

  • 2 | chinds | 3 拼写错误改成childs
  • 我已经编辑了我的答案。我创建了临时表来解释他应该做什么。
猜你喜欢
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多