select * from dual where a = 'aaa';a | b
-----------------
aaa bbb
aaa ccc
aaa ddd如果我想把它转成如下一行记录四列的格式SQL该怎么写?上面的行数和下面的列数是对应并且动态的a | b | c | d
---------------------------
aaa bbb ccc ddd
-----------------
aaa bbb
aaa ccc
aaa ddd如果我想把它转成如下一行记录四列的格式SQL该怎么写?上面的行数和下面的列数是对应并且动态的a | b | c | d
---------------------------
aaa bbb ccc ddd
---------------------------
aaa bbb,ccc,ddd有什么好办法吗?
strSql varchar2(1000) := '';
i int := 0;
begin
dbms_output.put_line('select ' || '''aaa'',');
for listTable in (select * from tableName) loop
i := i + 1;
strSql := '''' || listTable.b || ''' as field' || to_char(i) || ',';
dbms_output.put_line(strSql);
end loop;
dbms_output.put_line(' '''' from dual');
end;--把打印在output里的字符运行一下,就是你要的结果,你无非就是想拼串
给你一个思路吧
先用分析函数给你的记录一个标识,就是c字段..
a | b | c
-----------------
aaa bbb 1
aaa ccc 2
aaa ddd 3
sql差不多是select a,b,row_number() over (partition by a order by b) rn from XX
然后在确定最大的标识字段,就是c字段最大是多少.
然后通过c字段用一般的行转列的方法就能获得你要的动态效果了...