我有表﹕
模具代号 数量 位置
A 1 1排
A 2 5排
A 1 4排
B 2 1排
B 5 6排
B 7 5排
B 8 4排
B 2 3排我想通过 sql 加总 变成 模具代号 数量 位置
A 4 1排,5排,4排
B 24 1排,6排,5排,4排,3排
模具代号 数量 位置
A 1 1排
A 2 5排
A 1 4排
B 2 1排
B 5 6排
B 7 5排
B 8 4排
B 2 3排我想通过 sql 加总 变成 模具代号 数量 位置
A 4 1排,5排,4排
B 24 1排,6排,5排,4排,3排
解决方案 »
- oracle11gR2的手动启动批处理文件,哪位高手给提供个?
- 定义类型问题?
- oracle 安装客户端出现VTA-1000: 该浏览器无法通过该文件或URL来启动
- 一个简单的job
- 直接用代码可以执行,建成存储过程后,不能执行
- 9/1 PL/SQL: SQL Statement ignored9/30 PL/SQL: ORA-00911: 无效字符
- 怎样将一个ORACLE数据库服务器的表数据自动定时备份到另一个ORACLE数据库服务器的表中?
- 求一道PL/SQL函数,急。。。
- Oracle Blob字段存放Base64编码字符,取出后与原码产生差异问题。
- 求把分组的字段连接起来的sql语句。请教
- 求修改SQL句,提高搜索速度
- 精通oracle的高手来看呀!!
from 表 group by 模具代号 先create自定义聚集函数:(for 9i)
create or replace type string_agg_type as object
(
total varchar2(4000),
static function
ODCIAggregateInitialize(sctx IN OUT string_agg_type )
return number,
member function
ODCIAggregateIterate(self IN OUT string_agg_type ,
value IN varchar2 )
return number,
member function
ODCIAggregateTerminate(self IN string_agg_type,
returnValue OUT varchar2,
flags IN number)
return number,
member function
ODCIAggregateMerge(self IN OUT string_agg_type,
ctx2 IN string_agg_type)
return number
);
/
create or replace type body string_agg_type
is
static function ODCIAggregateInitialize(sctx IN OUT string_agg_type)
return number
is
begin
sctx := string_agg_type( null );
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT string_agg_type,
value IN varchar2 )
return number
is
begin
self.total := self.total || ',' || value;
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN string_agg_type,
returnValue OUT varchar2,
flags IN number)
return number
is
begin
returnValue := ltrim(self.total,',');
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT string_agg_type,
ctx2 IN string_agg_type)
return number
is
begin
self.total := self.total || ctx2.total;
return ODCIConst.Success;
end;
end;
/
CREATE or replace
FUNCTION stragg(input varchar2 )
RETURN varchar2
PARALLEL_ENABLE AGGREGATE USING string_agg_type;
/
SQL> CREATE TABLE TEST(ID VARCHAR2(5), QUANTITY NUMBER, PLACE VARCHAR2(10));Table createdSQL> INSERT INTO TEST VALUES('A', 1, '1攔');1 row insertedSQL> INSERT INTO TEST VALUES('A', 2, '5攔');1 row insertedSQL> INSERT INTO TEST VALUES('A', 1, '4攔');1 row insertedSQL> INSERT INTO TEST VALUES('B', 2, '1攔');1 row insertedSQL> INSERT INTO TEST VALUES('B', 5, '6攔');1 row insertedSQL> INSERT INTO TEST VALUES('B', 7, '5攔');1 row insertedSQL> INSERT INTO TEST VALUES('B', 8, '4攔');1 row insertedSQL> INSERT INTO TEST VALUES('B', 2, '3攔');1 row insertedSQL> SELECT * FROM TEST;ID QUANTITY PLACE
----- ---------- ----------
A 1 1攔
A 2 5攔
A 1 4攔
B 2 1攔
B 5 6攔
B 7 5攔
B 8 4攔
B 2 3攔8 rows selected
生成SQL语句:
SQL> SELECT ID, SUM(QUANTITY) QUANTITY,LTRIM(MAX(SYS_CONNECT_BY_PATH(PLACE, ',')), ',') PLACE
2 FROM (SELECT TEST.*, MIN(PLACE) OVER(PARTITION BY ID) MIN_PLACE,
3 (ROW_NUMBER() OVER(ORDER BY ID)) + (DENSE_RANK() OVER(ORDER BY ID)) NUMID FROM TEST)
4 START WITH PLACE = MIN_PLACE
5 CONNECT BY PRIOR NUMID = NUMID - 1 GROUP BY ID;ID QUANTITY PLACE
----- ---------- --------------------------------------------------------------------A 4 1攔,5攔,4攔
B 24 1攔,6攔,5攔,4攔,3攔
----- ---------- -----------------
A 4 1攔,5攔,4攔
B 24 1攔,6攔,5攔,4攔,3攔----------------------------
详细解释见:
http://spaces.msn.com/citywanderer/
2006年1月的“较复杂的ORACLE行列转换”
能人﹐單個sql查詢語名能不能搞定啊
我用的是 oracle 8i ,SYS_CONNECT_BY_PATH 好象沒有這個吧