comname name sex
1公司 小王 男
1公司 小李 女
2公司 小张 男
我想将同公司的内容合在一起如:
comname name sex
1公司 小王,小李 男,女
2公司 小张 男
1公司 小王 男
1公司 小李 女
2公司 小张 男
我想将同公司的内容合在一起如:
comname name sex
1公司 小王,小李 男,女
2公司 小张 男
解决方案 »
- oracle10g 里面如何查询当前用户下有多少触发器以及触发器涉及的表名字?
- 大家看看这个sql怎么优化呀,想破头了
- oledb访问数据库,而且设置了Auto translate=false,读出来的结果还是乱码
- 如何在存储过程中自动将本身的session断开呢?
- after insert Trigger 问题:
- 高分请教高手,如何让oracle 8i自动执行一段已经写好的sql???
- pl/sql中怎们把vchar(4000)的数据导入到long?(感谢!)
- oracle集成管理问题
- 请问如何搜索局域网内oracle服务器
- 请问,在oracle 怎么写sql语句查询dwm数据库以t开头的表啊,谢谢,急
- 请问是该语句是否真的执行了?
- 如何查询有哪些存储过程正在运行?
在 oracle 文档中 PL/SQL User's Guide and Reference Release 2 (9.2)
有详细的解释,给你个复杂的例子吧CREATE TABLE StockTable (
ticker VARCHAR(4),
open_price NUMBER,
close_price NUMBER
);
CREATE TYPE TickerType AS OBJECT
(
ticker VARCHAR2(4),
PriceType VARCHAR2(1),
price NUMBER
);CREATE TYPE TickerTypeSet AS TABLE OF TickerType;CREATE PACKAGE refcur_pkg IS
TYPE refcur_t IS REF CURSOR RETURN StockTable%ROWTYPE;
END refcur_pkg;
/
CREATE FUNCTION StockPivot(p refcur_pkg.refcur_t) RETURN TickerTypeSet
PIPELINED IS
out_rec TickerType := TickerType(NULL,NULL,NULL);
in_rec p%ROWTYPE;
BEGIN
LOOP
FETCH p INTO in_rec;
EXIT WHEN p%NOTFOUND;
-- first row
out_rec.ticker := in_rec.Ticker;
out_rec.PriceType := 'O';
out_rec.price := in_rec.OpenPrice;
PIPE ROW(out_rec);
-- second row
out_rec.PriceType := 'C';
out_rec.Price := in_rec.ClosePrice;
PIPE ROW(out_rec);
END LOOP;
CLOSE p;
RETURN;
END;
/SELECT x.Ticker, x.Price
FROM TABLE(StockPivot( CURSOR(SELECT * FROM StockTable))) x
WHERE x.PriceType='C';
你的需求刚好相反,是多行合并一行,原理是一样的