日期:2014-05-17  浏览次数:20726 次

我快崩溃了,大家来帮帮忙吧
有这样两张表:
表A(主键AID) 表B(主键BID)
AID Name BID AID Name Text
1 a 1 1 x a1
2 b 2 1 y a2
3 c 3 1 z a3
  4 2 r a4
  5 3 s a5

现在两表关联查询,希望出来这样的结果:
AID A.Name Text
1 a a1,a2,a3
2 b a4
3 c a5

不能在程序里处理...所以该怎么写这个查询SQL?
可以用临时表...

有这样两张表:
表A(主键AID) 表B(主键BID)
AID Name BID AID Name Text
1 a 1 1 x a1
2 b 2 1 y a2
3 c 3 1 z a3
  4 2 r a4
  5 3 s a5

现在两表关联查询,希望出来这样的结果:
AID A.Name Text
1 a a1,a2,a3
2 b a4
3 c a5

不能在程序里处理...所以该怎么写这个查询SQL?
可以用临时表...



------解决方案--------------------
又是一个合并报表的问题
把我的这个代码拿去看一下

/*现在有如下两张表分别为:
表A
ID Name
1 张三
2 李四
表B
ID XMMC CODE RYID
1 A项目一 XMONE 1
2 A项目二 XMTWO 1
3 A项目三 XMTHREE 1
4 B项目一 XMONE 2

要求一条SQL语句实现如下结果

表C
ID NAME XMONE XMTWO XMTHREE
1 张三 A项目一 A项目二 A项目三
2 李四 B项目一 [空] [空]
 
 */
 --建表
 create table testa
 (
 id int,
 name varchar2(20)
 );
 create table testb
 (
 id int ,
 xmmc varchar2(20),
 code varchar2(20),
 ryid int
 );
 --原始数据
insert into testa values( 1,'张三' );
insert into testa values( 2,'李四 ' );
insert into testb values( 1,'A项目一','XMONE',1 );
insert into testb values( 2,'A项目二','XMTWO', 1 );
insert into testb values( 3,'A项目三','XMTHREE',1 );
insert into testb values( 4,'B项目一','XMONE',2 );
--创建视图
create or replace view v_one
as
select a.id,a.name,b.xmmc as xmone 
from testa a,testb b
where a.id= b.ryid and code='XMONE'

create or replace view v_two
as
select a.id,a.name,b.xmmc as xmtwo 
from testa a,testb b
where a.id= b.ryid and code='XMTWO'

create or replace view v_three
as
select a.id,a.name,b.xmmc as xmthree 
from testa a,testb b
where a.id= b.ryid and code='XMTHREE'
--生成报表
select a.*,b.xmtwo ,c.xmthree from v_one a,v_two b ,v_three c where a.id=b.id(+) and a.id=c.id(+)


如果要想三列在一个字段里显示用||这个连接符就可以了

------解决方案--------------------
table:
CREATE TABLE TEST (XM VARCHAR(8), SL INTEGER);
INSERT INTO TEST
VALUES ('王一', 2),
('王一', 5),
('张二', 4),
('张二', 5),
('张二', 8),
('李三', 2),
('李三', 4),
('李三', 15),
('李三', 29);


WITH B (FATHER,SON,XM,CHAIN) AS
(SELECT A.XM || CHAR(ROW_NUMBER() OVER(PARTITION BY XM)) AS FATHER,A.XM || CHAR(ROW_NUMBER() OVER(PARTITION BY XM) + 1) AS SON,
A.XM, rtrim(ltrim(CHAR(A.SL))) 
FROM TEST A 
U