Oracle数据库SQL -将列转换为行-仅字符串值- PIVOT

bvhaajcl  于 2023-01-25  发布在  Oracle
关注(0)|答案(2)|浏览(146)

| ID(主键)|人类属性|属性值|
| - ------|- ------|- ------|
| 1个|姓名|约翰|
| 1个|国家|美国|
我想把一列变成一行
像这样:
| ID(主键)|姓名|国家|
| - ------|- ------|- ------|
| 1个|约翰|美国|

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用粉红色显示有错误。
pink error
如果有人已经发布了类似这样的东西,与名称或国家等简单的价值观,然后请链接到我。
提前感谢您的帮助!
我跟随这个视频https://www.youtube.com/watch?v=uT_Z2VP2Z24,但我不知道为什么我的语法是错误的,我知道有些东西是通过错误消息丢失,但我不知道我忘记了什么...

t1qtbnec

t1qtbnec1#

我猜,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

68bkxrlz

68bkxrlz2#

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

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))

相关问题