提问人:Bob der Bauer 提问时间:1/23/2023 更新时间:1/31/2023 访问量:80
Oracle Database SQL — 将列转换为行 — 仅字符串值 — PIVOT
Oracle Database SQL - Turn Column into a row - String values only - PIVOT
问:
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 关注了这个视频,但我不知道为什么我的语法是错误的,我知道通过错误消息缺少一些东西,但我不知道我忘记了什么......
答:
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
评论
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错误
- 语法错误
我修好了。
评论
[Name]
SELECT
语句: 是 的一部分,它放在 之前pivot
where
pivot
table_reference
where_clause