简单查询语句~~100分

lok9828 2008-11-13 07:27:41
表结构如下:
T1表(父表)

字段1
A
B
C

T2表(子表)
字段1 字段X
A X1
A X2
A X3
B Y1
C Z1
C Z2

==》查询结果如下
字段1 字段X1 字段X2
A X1 X2
B Y1
C Z1 Z2

把T2表的列(字段X)变成T1表行。 如果A表对应B表多于2条数据,那么就取两条(如A X3数据不需要)
如果少于两条,为空(如B 只有)

可以就送100分
...全文
280 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouxu_hust 2008-11-21
  • 打赏
  • 举报
回复
学习
wangbin1986 2008-11-21
  • 打赏
  • 举报
回复
xx
lwmonster 2008-11-20
  • 打赏
  • 举报
回复
那如果 取的列数不确定的话有办法吗???
yuanjianbin 2008-11-20
  • 打赏
  • 举报
回复
学习了
KingNE 2008-11-14
  • 打赏
  • 举报
回复
学习
caoleione 2008-11-14
  • 打赏
  • 举报
回复
在行转列的问题上 一般分析函数是很受用的 值得研究
liyunsheng613 2008-11-14
  • 打赏
  • 举报
回复
什么数据库都在用 ,不过都是用的简单的SQL语句
gdgongji1234 2008-11-14
  • 打赏
  • 举报
回复
1楼真强,本人佩服的五体投地
兔迪网络 2008-11-14
  • 打赏
  • 举报
回复
o
dawugui 2008-11-14
  • 打赏
  • 举报
回复
select m.字段1 ,
max(case n.px when 1 then n.字段X else '' end) 字段X1,
max(case n.px when 2 then n.字段X else '' end) 字段X2
from t1 m,
(select t.* , (select count(1) from t2 where 字段1 = t.字段1 and 字段X < t.字段X) + 1 px from t2 t) n
where m.字段1 = n.字段1
group by m.字段1
范佩西_11 2008-11-13
  • 打赏
  • 举报
回复
查询的话,A表只有一个字段,并且都在B表中
不需要做关联啊。
如果有其他字段并且都要查出来需要关联下
SQL> select * from t2;

C1 C2
---------- ----------
A X1
A X2
A X3
B Y1
C Z1
C Z2

6 rows selected

SQL>
SQL> select c1, max(decode(rn, 1, c2)) x1, max(decode(rn, 2, c2)) x2
2 from (select c1, c2, rn
3 from (SELECT C1,
4 C2,
5 ROW_NUMBER() OVER(partition by c1 order by c2) rn
6 from t2)
7 where rn <= 2)
8 group by c1
9 ;

C1 X1 X2
---------- ---------- ----------
A X1 X2
B Y1
C Z1 Z2
dahai99007 2008-11-13
  • 打赏
  • 举报
回复
我的回复呢?
dahai99007 2008-11-13
  • 打赏
  • 举报
回复
study!
icss_zhen 2008-11-13
  • 打赏
  • 举报
回复
行变列用法,max(decode......)支持一楼
andy_514 2008-11-13
  • 打赏
  • 举报
回复
厉害!
mantisXF 2008-11-13
  • 打赏
  • 举报
回复
-- TRY IT ..
SQL> SELECT T1.FIELD1,
2 MAX(DECODE(RN,1,FIELDX,NULL)) FIELDX1,
3 MAX(DECODE(RN,2,FIELDX,NULL)) FIELDX2
4 FROM T1,
5 (SELECT T2.*,
6 ROW_NUMBER() OVER(PARTITION BY FIELD1 ORDER BY FIELDX) RN
7 FROM T2
8 )TT
9 WHERE T1.FIELD1 = TT.FIELD1
10 GROUP BY T1.FIELD1;

FIELD1 FIELDX1 FIELDX2
------ ------- -------
A X1 X2
B Y1
C Z1 Z2
[Quote=引用楼主 lok9828 的帖子:]
表结构如下:
T1表(父表)

字段1
A
B
C

T2表(子表)
字段1 字段X
A X1
A X2
A X3
B Y1
C Z1
C Z2

==》查询结果如下
字段1 字段X1 字段X2
A X1 X2
B Y1
C Z1 Z2

把T2表的列(字段X)变成T1表行。 如果A表对应B表多于2条数据,那么就取两条(如A X3数据不需要)
如果少于两条,为空(如B 只有)

可以就送100分
[/Quote]

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧