oracle 中如何用一条SQL实现行记录作为列显示

有个表OWE是存放在ORACLE数据库上的。表中有以下字段:xh(序号),fjname(分局),name(用户名),hm(号码),zm(帐目),zq(帐期),charge... 有个表OWE是存放在ORACLE数据库上的。
表中有以下字段:xh(序号),fjname(分局),name(用户名),hm(号码),zm(帐目),zq(帐期),charge (金额)其中charge是数字型的,其它是字符型的。

表的记录如下:

序号 分局 用户名 号码 帐目 帐期 金额
1 石山 阿十三 123 aaa 0810 200
2 石山 阿十三 123 bbb 0810 300
3 石山 阿十三 123 ccc 0810 400
4 卡迪 坎大哈 654 aaa 0810 50
5 卡迪 坎大哈 654 bbb 0810 100
6 卡迪 坎大哈 654 ccc 0810 200
7 卡迪 坎大哈 654 ddd 0811 300

现在要将这张表查询出来,但是要按帐目分列显示,就是要显示为如下:

分局 用户名 号码 帐目1 帐目1金额 帐目2 帐目2金额 帐目3 帐目3金额 帐目4 帐目4金额
石山 阿十三 123 aaa 200 bbb 300 ccc 400
卡迪 坎大哈 654 aaa 50 bbb 100 ccc 300 ddd 300

以上能不能用一条sql语句实现。
展开
 我来答
troyzeng
推荐于2016-02-13 · TA获得超过158个赞
知道答主
回答量:32
采纳率:0%
帮助的人:42.5万
展开全部
也许你已经知道应该用下列的SQL语句。出现在select里面的列的个数只能是固定的,所以我觉得,如果zm里的数据是动态的话,你必须动态生成这个语句。
select fjname, name, hm,
max(decode(zm, 'aaa', zm, null )) zm1, max(decode(zm, 'aaa', charge, null )) zm1charge,
max(decode(zm, 'bbb', zm, null )) zm2, max(decode(zm, 'bbb', charge, null )) zm2charge,
max(decode(zm, 'ccc', zm, null )) zm3, max(decode(zm, 'ccc', charge, null )) zm3charge,
max(decode(zm, 'ddd', zm, null )) zm4, max(decode(zm, 'ddd', charge, null )) zm4charge
from owe
group by fjname, name, hm;
困魔咒
2008-11-14 · TA获得超过247个赞
知道小有建树答主
回答量:348
采纳率:0%
帮助的人:0
展开全部
用[回答者: troyzeng - 试用期 一级 11-14 02:59]的语句TEST结果如下:
SQL> select * from owe;

XH FJNAME NAME HM ZM ZQ CHARGE
---------- ---------- ---------- ---------- ---------- ---------- ---------
1 石山 阿十三 123 aaa 0810 200
2 石山 阿十三 123 bbb 0810 300
3 石山 阿十三 123 ccc 0810 400
4 卡迪 坎大哈 654 aaa 0810 50
5 卡迪 坎大哈 654 bbb 0810 100
6 卡迪 坎大哈 654 ccc 0810 200
7 卡迪 坎大哈 654 ddd 0811 300

7 rows selected
SQL> select fjname 分局, name 用户名, hm 号码,
2 max(decode(zm, 'aaa', zm, null )) 帐目1, max(decode(zm, 'aaa', charge, null )) 金额1,
3 max(decode(zm, 'bbb', zm, null )) 帐目2, max(decode(zm, 'bbb', charge, null )) 金额2,
4 max(decode(zm, 'ccc', zm, null )) 帐目3, max(decode(zm, 'ccc', charge, null )) 金额3,
5 max(decode(zm, 'ddd', zm, null )) 帐目4, max(decode(zm, 'ddd', charge, null )) 金额4
6 from owe
7 group by fjname, name, hm;

分局 用户名 号码 帐目1 金额1 帐目2 金额2 帐目3 金额3 帐目4 金额4
---------- ---------- ---------- ---------- --------- ---------- --------- ---------- --------- ---------- ---------
卡迪 坎大哈 654 aaa 50 bbb 100 ccc 200 ddd 300
石山 阿十三 123 aaa 200 bbb 300 ccc 400
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qbowen
2008-11-14 · TA获得超过165个赞
知道答主
回答量:203
采纳率:0%
帮助的人:165万
展开全部
一条sql语句很难实现吧 因为你的数据是动态的 函数里套用一个游标 返回出来还是比较简单的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式