Oracle Database SQL — 将列转换为行 — 仅字符串值 — PIVOT

Oracle Database SQL - Turn Column into a row - String values only - PIVOT

提问人:Bob der Bauer 提问时间:1/23/2023 更新时间:1/31/2023 访问量:80

问:

ID (PrimaryKey) HumanAttribut(人类属性) 归因值
1 名字 John
1 国家 美国

我想将一列变成一行

喜欢这个:

ID (PrimaryKey) 名字 国家
1 John 美国
SELECT ID, (*pink*) [Name], [Country]
FROM
(SELECT ID, HumanAttribut as Ahuman, attributValue
FROM tableA
WHERE ID = 1
AND HumanAttribut IN ('Name', 'Country')) as SourceTabele
PIVOT
(Max(attributeValue)
For
Ahuman in ([Name], [Country])
) as PIVOT_TABLE

我收到错误缺少表达式。Oracle 以粉红色显示存在错误。

粉红错误

如果有人已经发布了类似的东西,带有名称或国家/地区等简单值,请将其链接到我。

提前感谢您的帮助!

https://www.youtube.com/watch?v=uT_Z2VP2Z24 关注了这个视频,但我不知道为什么我的语法是错误的,我知道通过错误消息缺少一些东西,但我不知道我忘记了什么......

SQL Oracle 透视表 语法错误 oracle-sqldeveloper

评论

0赞 astentx 1/23/2023
这回答了你的问题吗?Oracle SQL 透视查询
0赞 astentx 1/23/2023
Oracle 不使用括号作为带引号的标识符,因此标识符无效[Name]
0赞 astentx 1/23/2023
and 子句位于子句之前。请参见SELECT 语句: 是 的一部分,它放在 之前pivotwherepivottable_referencewhere_clause
0赞 Bob der Bauer 1/23/2023
这可能吗?在这里,我找到了一个带有 WHERE 的网站,但在 PIVOT 之前,或者这是一个错误?techonthenet.com/oracle/pivot.php
0赞 astentx 1/23/2023
上述链接中的 Where 子句应用于子查询中。但是我错过了你代码中的括号计数,这部分没关系。只需删除方括号即可

答:

0赞 Sergey 1/23/2023 #1

我猜,Oracle 不喜欢 HumanAttribut 作为 Ahuman,请尝试 HumanAttribut Ahuman

您不仅可以使用 PIVOT 运算符,还可以使用其他方法(希望它会有所帮助)

WITH CTE(ID,HumanAttribut,attributValue)
AS
(
   SELECT 1,    'Name',     'John' FROM DUAL UNION ALL
   SELECT 1,    'Country',  'USA' FROM DUAL
)
SELECT C.ID,
 MAX
  (
      CASE
        WHEN C.HumanAttribut='Name'THEN C.attributValue
        ELSE ''
      END
  )NAME,
  MAX
  (
      CASE
       WHEN C.HumanAttribut='Country'THEN C.attributValue
       ELSE ''
     END
  )COUNTRY
  FROM CTE C
 GROUP BY C.ID

https://dbfiddle.uk/AKl-2nK7

评论

0赞 Bob der Bauer 1/23/2023
可悲的是,必须用 PIVOT 解决这个问题,但尽管如此,还是要感谢
0赞 Mohit Dagar 1/23/2023 #2

以下是一些可以帮助您的示例

SELECT *
FROM   your_table
PIVOT  (MAX(column_name)
       FOR new_row_name IN ('value1', 'value2', 'value3'))

还可以使用 UNPIVOT 运算符将行转换为列。

SELECT *
FROM   your_table
UNPIVOT (column_name FOR new_row_name IN (value1, value2, value3))
0赞 Bob der Bauer 1/31/2023 #3
  • 语法错误,使用 Oracle db
  • 语法 铁路图M错误
  • 语法错误

我修好了。