这样的SQL语句该如果实现?

[复制链接]
查看11 | 回复9 | 2007-1-19 01:03:19 | 显示全部楼层 |阅读模式
一张表结构: 工号,人员,证书名,证书号码四个字段
需要通过SQL查出一个人的所有证书名和证书号码,
得到的结果是这样的:人名,证书名1,证书号码1,证书名2,证书号码2,证书名3,证书号码3
假设这个人有三个证书.这样SQL要怎么样写..
(不考虑表结构的合理性)
回复

使用道具 举报

千问 | 2007-1-19 01:03:19 | 显示全部楼层
太多这样的问题,先去找一下试试。
回复

使用道具 举报

千问 | 2007-1-19 01:03:19 | 显示全部楼层
建议你用存储过程写。因为列的数量(一个人最多的证书数量)不固定。

动态创建一个表,列根据最大数量创建,然后将相关数据置入。然后查询该表
回复

使用道具 举报

千问 | 2007-1-19 01:03:19 | 显示全部楼层
通过PL/SQL或者在应用程序中处理该问题都挺简单,只是不知道怎么用一句SQL语句能实现
期待解决!
回复

使用道具 举报

千问 | 2007-1-19 01:03:19 | 显示全部楼层
自定义一个聚合函数
回复

使用道具 举报

千问 | 2007-1-19 01:03:19 | 显示全部楼层
行列转换
回复

使用道具 举报

千问 | 2007-1-19 01:03:19 | 显示全部楼层
[PHP]SQL> create table zs (id varchar2(5),name varchar2(10),zsm varchar2(20),zshm varchar2(20));
表已创建。
SQL> insert into zs values('12345','张三','证书一','123456789');
已创建 1 行。
SQL> insert into zs values('54321','李四','证书三','789456123');
已创建 1 行。
SQL> insert into zs values('12345','张三','证书二','987654321');
已创建 1 行。
SQL> insert into zs values('12345','张三','证书三','654321987');
已创建 1 行。
SQL> insert into zs values('54321','李四','证书一','321654987');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select replace(id||','||name||max(sys_connect_by_path(a,',')),'*',',') as str
2from (
3select id,name,zsm||'*'||zshm as a,row_number() over(partition by name order by id) r
4from zs
5) start with r=1
6connect by prior r=r-1 and prior id=id and prior name=name
7group by id,name;
STR
--------------------------------------------------------------------
12345,张三,证书一,123456789,证书二,987654321,证书三,654321987
54321,李四,证书三,789456123,证书一,321654987
[/PHP]
不知道这样可以不可以?
回复

使用道具 举报

千问 | 2007-1-19 01:03:19 | 显示全部楼层
可以的,谢谢
回复

使用道具 举报

千问 | 2007-1-19 01:03:19 | 显示全部楼层
最初由 fangjinde 发布
[B]可以的,谢谢 [/B]

真的可以吗?这种写法忽视了姓名重复的问题啊,不信楼主自己测试一下,partition 的地方改成用工号即ID看看,效果应该更符合要求吧? 改成
select replace(id||','||name||max(sys_connect_by_path(a,',')),'*',',') as str
from (
select id,name,zsm||'*'||zshm as a,row_number() over(partition by id order by name) r
from zs
) start with r=1
connect by prior r=r-1 and prior id=id and prior name=name
group by id,name;
只是随便看了一下,没实际测试。
回复

使用道具 举报

千问 | 2007-1-19 01:03:19 | 显示全部楼层
partition by id order by zshm是不是更好一点....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行