进入列Oracle pl sql

时间:2014-10-29 09:53:54

标签: oracle plsql

我正在使用oracle 10g pl sql,我想将行转换为列,但列应该是动态的而不是硬编码的。

select *
from
 "EnumerationValue"
   pivot
    (count("pkEnumerationValueId")
      for "Text" in (select "Text" from "EnumerationValue" where "fkEnumerationId"=6));

我通过搜索找到了这个查询,但它给了我错误。

ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"

然后我尝试了这个

VARIABLE g_ref REFCURSOR
DECLARE
 v_sql VARCHAR2(32767);
  BEGIN
   v_sql := 'select "Text"';
   FOR rec IN
     (select "Text" from "EnumerationValue" inner join "Enumeration" on "Enumeration"."pkEnumerationId"="EnumerationValue"."fkEnumerationId"
   where "EnumTable"='Vehicle Model')
   LOOP
     v_sql := v_sql
           || ',sum(case when "Text" is not null then 1 else 0)' || rec."Text";
    END LOOP;
  v_sql := v_sql
         || ',"pkEnumerationValueId" from "EnumerationValue" group by "Text","pkEnumerationValueId"';
 OPEN :g_ref FOR v_sql;
 END;

它给了我错误

ORA-00905: missing keyword
ORA-06512: at line 14
00905. 00000 -  "missing keyword"

我的表格列是“文字”,包含“Suzuki”,“Ferrari”,“Honda”,“Ford”等值,它可以更多(用户可以插入新值)。 所以我想要这样的结果。

Model        Suzuki        Ferrari     Honda      Ford   ........

2000           1              0          0          0
2001           5              2          5          0
2002           9              12         3          2

3 个答案:

答案 0 :(得分:1)

根据Oracle SQL Reference:“子查询仅与XML关键字一起使用。”

换句话说:您无法在静态SQL中进行完全动态的,基于枚举表的旋转查询,而无法以XML格式获取输出。

“硬编码”值。

答案 1 :(得分:1)

回答你的问题

  1. Oracle直到11G才支持PIVOT / UNPIVOT。
  2. 你不能让它完全动态地实现转置/转轴

答案 2 :(得分:1)

您应该删除以前的数据库并构建新数据库以解决此问题