Oracle11g Oracle Pivot-将值转换为列
我在Oracle 11g中有一个包含3个字段的表:Oracle11g Oracle Pivot-将值转换为列,oracle11g,pivot,Oracle11g,Pivot,我在Oracle 11g中有一个包含3个字段的表: STUDYID | STUDY_PARAMETER | STUDY_VALUE 所以,我需要的是按以下顺序显示值: STUDY_ID | AGE_GROUP | AGE_UNIT | TRIAL_TYPE 等等 到目前为止,我得到的是: SELECT * FROM ( SELECT STUDYID, STUDY_VALUE, STUDY_PARAMETER FROM RD.STU
STUDYID | STUDY_PARAMETER | STUDY_VALUE
所以,我需要的是按以下顺序显示值:
STUDY_ID | AGE_GROUP | AGE_UNIT | TRIAL_TYPE
等等
到目前为止,我得到的是:
SELECT *
FROM (
SELECT STUDYID, STUDY_VALUE, STUDY_PARAMETER
FROM RD.STUDY_INFO
)
PIVOT (
SUM(STUDY_VALUE)
FOR (STUDY_PARAMETER)
IN (
'Age Unit' AS AGE_UNIT,
'Age Group' AS AGE_GROUP,
'Trial Type' AS TRIAL_TYPE
)
);
我从网上的例子中学到了这一点,但我不确定我是否能像这样使用SUM
我得到这个错误:
ORA-01722: invalid number
01722. 00000 - "invalid number"
有人知道我做错了什么吗?由于“研究值”列似乎是一个字符串,因此需要对值使用“最大”或“最小聚合”函数:
SELECT *
FROM
(
SELECT STUDYID, STUDY_VALUE, STUDY_PARAMETER
FROM STUDY_INFO
)
PIVOT
(
MAX(STUDY_VALUE)
FOR (STUDY_PARAMETER) IN ('Age Unit' AS AGE_UNIT,
'Age Group' AS AGE_GROUP,
'Trial Type' AS TRIAL_TYPE)
);
请参见由于“研究值”列显示为字符串,因此需要对值使用最大或最小聚合函数:
SELECT *
FROM
(
SELECT STUDYID, STUDY_VALUE, STUDY_PARAMETER
FROM STUDY_INFO
)
PIVOT
(
MAX(STUDY_VALUE)
FOR (STUDY_PARAMETER) IN ('Age Unit' AS AGE_UNIT,
'Age Group' AS AGE_GROUP,
'Trial Type' AS TRIAL_TYPE)
);
请参见,您可以尝试此查询
SELECT
ID,
MAX(Case When parameter='Age Group' then Value else '0' end) AS AgeGroup,
MAX(Case When parameter='Trial Type' then Value else '0'end)AS TrialType,
MAX(Case When parameter='Age Unit' then Value else '0'end)AS AgeUnit
FROM teststack
GROUP BY ID
ORDER BY ID
您可以尝试此查询
SELECT
ID,
MAX(Case When parameter='Age Group' then Value else '0' end) AS AgeGroup,
MAX(Case When parameter='Trial Type' then Value else '0'end)AS TrialType,
MAX(Case When parameter='Age Unit' then Value else '0'end)AS AgeUnit
FROM teststack
GROUP BY ID
ORDER BY ID
我试着使用MAX aggregate fun,它似乎起了作用。我现在正在测试它。我试着使用MAX aggregate fun,它似乎正在工作。我现在正在测试。@Angelina这个答案对你有帮助吗?@Angelina这个答案对你有帮助吗?谢谢@bluefeet。成功了!谢谢你,蓝脚。成功了!