我有一份报告,我试图在一行中显示父信息和一个家庭中的所有孩子。 没有“父”表存储父母的信息,也没有将父母与孩子联系的身份证,也没有将兄弟姐妹与兄弟姐妹联系起来的身份证。判断他们是兄弟姐妹的唯一方法是他们是否有相同的地址(逻辑是如果他们有相同的地址,他们住在一起,并且是同一家庭的一部分)。所有信息都从学生表中的“学生”表或自定义字段中提取,该表存储父信息,他们居住的地址等。
我想要显示两次而不是显示父信息 这样的信息: Parent_name,address,phone,child1_name,child1_schoolname,child1_age,child2_name,child2_schoolname,child2_age等(对于该家庭中的每个孩子)
问题在于,并非每个家庭都会有相同数量的孩子,我只能通过他们的地址链接兄弟姐妹。
如何在一行中显示每个家庭的所有信息?这可能吗?怎么样?我试过数据透视表,但没有用。
答案 0 :(得分:0)
这是一个经典的“你不应该在数据库中做报告”的问题。数据库用于数据检索,而不是数据格式化。但是我们假设你知道这一点,并且出于某种原因需要这样做。
我将使用的算法是
sort by age desc
。 如果您定义一些最大数量的兄弟姐妹(五个?)而不是动态构建这些兄弟姐妹,这将会容易得多。
如果父母在同一张桌子上,你怎么知道哪些是父母,哪些是孩子?
答案 1 :(得分:0)
如果您有两个表,一个用于Parent(第一个表),另一个用于Children(第二个表),如下所示:
您可以在数据模型中执行类似的操作:
select Parent.NAME as parent_name,
Parent.ADDRESS as parent_address,
Parent.PHONE AS phone,
(
select listagg(Child.NAME,',')
within group(order by Child.NAME)
from CHILD Child
where Child.ADDRESS=Parent.ADDRESS
)as children_names,
(
select
listagg(Child.AGE,',')
within group(order by Child.NAME)
from CHILD Child
where Child.ADDRESS=Parent.ADDRESS
)as children_ages
from PARENT Parent .
您将获得输出查询结果:
Listagg 是您的解决方案,可以将多个行合并为一个。
但是,listagg兼容数据库11g和最新版本, 所以万一你有旧版本,这是行不通的。
希望得到这个帮助。