【发布时间】:2023-04-04 19:00:01
【问题描述】:
我正在运行以下查询,需要将行输出为列。当我添加第二个 MAX 语句时,我收到一个错误 ORA-00918 列定义不明确。不知道我做错了什么。任何帮助将不胜感激。
SELECT * from (
SELECT a.REF_NUM as "Number", a.SUMMARY, a.DESC_SEARCH as "Description", a.Status, e.Label, e.Value
FROM ca a,
cr_prp e
WHERE
a.PERSID = e.OWNING_CR
AND a.CATEGORY = '16996807'
ORDER by a.REF_NUM DESC)t
PIVOT
(
MAX(CASE WHEN LABEL = 'Plan/UnPlanned' THEN Value END),
MAX(CASE WHEN LABEL = 'Reason for' THEN Value END),
MAX(CASE WHEN LABEL = 'Name & "ID"' THEN Value END)
FOR LABEL
IN ('Plan/UnPlanned',
'Reason for',
'Name & "ID"')
)
【问题讨论】:
-
我相信这是因为您有三个
VALUE列。尝试在每个MAX(...)行上放置一个别名以区分它们。 -
你确实需要
case表达式为pivot为你做这些 -
我添加了一个别名,但是我现在看到空白列 MAX(CASE WHEN LABEL = 'Plan/UnPlanned' THEN Value END) as A, MAX(CASE WHEN LABEL = 'Reason for' THEN Value END) 作为 B,MAX(CASE WHEN LABEL = 'Name & "ID"' THEN Value END) as C
-
如果我使用 Pivot,如何在不使用大小写的情况下运行它。
-
pivot等价于条件聚合:pivot( agg(measure) for col in (val1, ..., valN))与agg(case col when val1 then measure end), ... agg(case col when valN then measure end)或更多 Oracle 风格的agg(decode(col, val1, measure)), ...相同(对于空值也更方便)