请教一个SQL语句

DWilliam 2011-06-10 02:25:31
有一个表如下:
Name Number Address

A 1 1
A 2 3
B 2 2
C 4 4

........


要求用sql 输出如下:

Name Address_1 Address_2 Address_3 Address_4

A 1 0 2 0
B 0 0 2 0
C 0 0 0 4

........
...全文
141 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
304的的哥 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dwilliam 的回复:]

如果地址字段不只有4个,怎么处理
[/Quote]

--是几个就多加几个max子句吧
select name,max(decode(addr,1,num,0)) addr1,
max(decode(addr,2,num,0)) addr2,
max(decode(addr,3,num,0)) addr3,
max(decode(addr,4,num,0)) addr4,
max(decode(addr,5,num,0)) addr5,
max(decode(addr,6,num,0)) addr6
from t
group by name
--这是一种不灵活的写法,但是实际中,某个name下的address也不会达到7、8个的

若要使用动态的写法,请参考:
http://topic.csdn.net/u/20100109/13/6a10c168-f190-4766-b838-adbf03c4ac7b.html?53031
stven0 2011-06-16
  • 打赏
  • 举报
回复
我觉得类似这个 http://topic.csdn.net/u/20110609/14/562eade9-3759-4180-a956-a71f03b00857.html
wcofen 2011-06-16
  • 打赏
  • 举报
回复
让我想起了上学时候 书上的做的那个习题=.=
呵呵 主要就是在投影上 的操作.~!
DWilliam 2011-06-10
  • 打赏
  • 举报
回复
如果地址字段不只有4个,怎么处理
304的的哥 2011-06-10
  • 打赏
  • 举报
回复

SQL> with t as(
2 select 'A' name,1 num,1 addr from dual union all
3 select 'A',2,3 from dual union all
4 select 'B',2,2 from dual union all
5 select 'C',4,4 from dual)
6 select name,max(decode(addr,1,num,0)) addr1,
7 max(decode(addr,2,num,0)) addr2,
8 max(decode(addr,3,num,0)) addr3,
9 max(decode(addr,4,num,0)) addr3
10 from t
11 group by name
12 /

NAME ADDR1 ADDR2 ADDR3 ADDR3
---- ---------- ---------- ---------- ----------
A 1 0 2 0
B 0 2 0 0
C 0 0 0 4
304的的哥 2011-06-10
  • 打赏
  • 举报
回复

--如果只有4个地址的话:
select name,max(decode(addr,1,num,0)) addr1,
max(decode(addr,2,num,0)) addr2,
max(decode(addr,3,num,0)) addr3,
max(decode(addr,4,num,0)) addr3
from t
group by name
xumeng929 2011-06-10
  • 打赏
  • 举报
回复
没有逻辑怎么看
xumeng929 2011-06-10
  • 打赏
  • 举报
回复
写出你想要的逻辑

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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