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语句实现。 展开
表中有以下字段: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语句实现。 展开
展开全部
也许你已经知道应该用下列的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;
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;
展开全部
用[回答者: 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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一条sql语句很难实现吧 因为你的数据是动态的 函数里套用一个游标 返回出来还是比较简单的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询