Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle11g Oracle Pivot-将值转换为列_Oracle11g_Pivot - Fatal编程技术网

Oracle11g Oracle Pivot-将值转换为列

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

我在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.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。成功了!谢谢你,蓝脚。成功了!