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

求助SQL语句的写法,谢谢!
问题如下:表T1中有字段ID(唯一健)等字段,ID值分别为1到50,共50条记录;表T2中有关联字段ID、Year等字段,共100条记录,ID取(1到50),Year取值分别为2006,2007。这样,表T2共有100条记录。
  想通过一条语句从T1、T2中选取如下50条记录:字段顺序为:   ID,T1中其它字段,Year(=2006)时T2中其它字段,Year(=2007)时T2中其它字段。即相当于将T2中两条记录变为一条记录显示出来? 
  请各位帮忙看看语句如何写?多谢!


------解决方案--------------------
CREATE TABLE T1(ID INTEGER,F1 VARCHAR2(10));
INSERT INTO T1 VALUES(1, 'v1 ');
INSERT INTO T1 VALUES(2, 'v2 ');
INSERT INTO T1 VALUES(50, 'v50 ');
COMMIT;

CREATE TABLE T2(ID INTEGER,Year INTEGER,F3 VARCHAR2(10));
INSERT INTO T2 VALUES(1,2006, 'x1 ');
INSERT INTO T2 VALUES(1,2007, 'x2 ');
INSERT INTO T2 VALUES(2,2006, 'x3 ');
INSERT INTO T2 VALUES(2,2007, 'x4 ');
INSERT INTO T2 VALUES(50,2006, 'x98 ');
INSERT INTO T2 VALUES(50,2006, 'x99 ');
COMMIT;

SELECT T1.ID,T1.F1,TA.F3 "F3(2006) ",TB.F3 "F3(2007) "
FROM (SELECT ID,F3 FROM T2 WHERE YEAR=2006)TA,
(SELECT ID,F3 FROM T2 WHERE YEAR=2007)TB,
T1
WHERE T1.ID=TA.ID(+) AND T1.ID=TB.ID(+);

ID F1 F3(2006) F3(2007)
---------- ---------- ---------- ----------
1 v1 x1 x2
2 v2 x3 x4
50 v50 x98
50 v50 x99

------解决方案--------------------
select a.id,a.f1,decode(b.year,2006,b.f3, ' ') as f3(2006),
decode(b.year,2007,b.f3, ' ') as f3(2007)
from t1 a ,t2 b
where a.id=b.id