我正在使用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
答案 0 :(得分:1)
答案 1 :(得分:1)
回答你的问题
答案 2 :(得分:1)
您应该删除以前的数据库并构建新数据库以解决此问题