oracle sql中的动态列
Posted
技术标签:
【中文标题】oracle sql中的动态列【英文标题】:Dynamic column in oracle sql 【发布时间】:2017-01-21 11:11:04 【问题描述】:我想在数据库中查询一些分类帐名(如子级)、分类帐组名(如父级,它是分类帐名的父级)和分类帐组名(或分类帐名)的所有升序父级。我正在从分类帐名和它的即时的 ACC_LEDGER 表中搜索数据称为 ledgergroupname 的父级被保存。ledgergroupname 的升序父级保存在 ACC_LEDGERGROUP 表中。 sql--
select
pp.Ledgercode,
pp.Ledgername,
pp.Ledgergroupcode,
pp.Ledgergroupname,
(select Acc_Ledgergroup.Parentname from Acc_Ledgergroup where Acc_Ledgergroup.Ledgergrpcode=pp.Ledgergroupcode) as PARENTNAME
from
(select
LED.LEDGERCODE,
Led.Ledgername,
Led.Ledgergroupcode,
Led.Ledgergroupname
from ACC_LEDGER LED where Led.Ledgercode IN ('01003024007','01003024019'))pp
它给了我结果-- 我想要的是——
所以对于每个分类帐我想显示父级到根(它的级别对于不同的分类帐意味着对于某些分类帐它有 7 个上父级到达“根”父级)。
我正在尝试查询这样的内容(仅供您理解)--
select
pp.Ledgercode,
pp.Ledgername,
pp.Ledgergroupcode,
pp.Ledgergroupname,
(select Acc_Ledgergroup.Parentname from Acc_Ledgergroup where Acc_Ledgergroup.Ledgergrpcode=pp.Ledgergroupcode) as PARENTNAME
while(parentname != root)
select parent name from Ledger group
from the_table
所以表中的列选择或表的连接不是固定的,这取决于我有多少父级,我如何在 oracle sql 中做到这一点?
【问题讨论】:
查找递归分层查询。 我也试过启动和连接,但无法解决 必须为每个父级设置单独的列,否则 /root/primary/Current Asset 可以吗?如果不是,那么不同级别会发生什么 - 例如父行数为 5,而另一行数为 10?您最好在应用程序代码中执行所有这些操作。 @GurV 我想写一个查询,我的结果列号将根据我的父级别。例如。如果一条记录有 3 个父项,则列将为 5 (3+ledgername+ledgergroupname) ,如果另一条记录有两个父项,则 1 列将显示 null --like this 父母人数有上限吗? 【参考方案1】:通常这类问题可以通过分层查询(使用CONNECT BY
)来解决,但是在Oracle 中,查询不能有可变数量的列。作为一种解决方法,您可以使用 sys_connect_by_path
使用一些分隔符连接所有级别:
select sys_connect_by_path(Ledgergroupname, '/')
from Acc_Ledgergroup
where Ledgergroupname = 'root'
start with Ledgercode in ('01003024007', '01003024019')
connect by prior Ledgercode = Ledgergroupcode
【讨论】:
以上是关于oracle sql中的动态列的主要内容,如果未能解决你的问题,请参考以下文章