写一个存储过程,对一张表的所有字段进行group by。表名是入参,也就是说,事先不知道这张表的字段名。
请问怎么才能实现group by呢?我知道可以把字段逐一赋给变量然后group by,但是,关键在于,
假设表中一共有5个字段,要group by以下任意2个字段,3个字段,4个字段,5个字段的组合。
主要是想实现字段组合的分组统计,如果不用group by可以解决的思路也行。
请问怎么才能实现group by呢?我知道可以把字段逐一赋给变量然后group by,但是,关键在于,
假设表中一共有5个字段,要group by以下任意2个字段,3个字段,4个字段,5个字段的组合。
主要是想实现字段组合的分组统计,如果不用group by可以解决的思路也行。
解决方案 »
- 用PL/SQL登录oracle提示框空白
- ORACLE 游标
- 高手们,求写一个动态SQL语句,谢谢了
- oracle中有没有sql2000中的inserted和deleted表?
- oracle连接问题
- 在Command Window下怎么样执行一个存储过程?
- 关于索引的一个问题
- 谁能将在ORACLE存贮过程中,使用游标的情况给讲解一下,最好提供几个例子。
- sqlplus 错误:sltln
- send one complex porblem on 'sql ' to our friends ,come here plese,baby,baby!!
- 求Oracle中insert大量无重复记录
- 开发中遇到的问题,求解。
o OUT SYS_REFCURSOR) AUTHID CURRENT_USER IS
v_col_list VARCHAR2(2000);
v_sql_str VARCHAR2(2000);
BEGIN
EXECUTE IMMEDIATE 'select wm_concat(t.COLUMN_NAME) from user_tab_columns t where t.TABLE_NAME=upper(''' ||
i_tablename || ''')'
INTO v_col_list;
v_sql_str := 'select * from ' || i_tablename || ' group by cube(' ||
v_col_list || ')';
OPEN o FOR v_sql_str;
END;
/SQL> select * from t;NAME ID
---------- ----------
aa 1
bb 2
cc 3
1 4
abc 5
SQL> var o refcursor;
SQL> exec p_groupby('t',:o);PL/SQL 过程已成功完成。SQL> print oNAME ID
---------- ---------- 1
2
3
4
5
1
1 4
aa
aa 1
bbNAME ID
---------- ----------
bb 2
abc
abc 5
cc
cc 3已选择16行。
比如5个字段,对任意两个字段组合group by,就要
用1字段逐一group by 2字段、3字段
用2字段逐一 group by 3字段,4字段
如果每个变量接收一个字段名,写一个循环group by怎么写?变量名不能运算,怎么指定用哪个变量?其实还想过取字段名后给每个字段添加唯一标识,那么写循环的时候就可以通过标识来取对应的字段名,只用一个变量接收字段名就行了。当时group by 的时候又需要使用到多个字段,那就需要多个变量