2015-11-07 68 views
0

我有一份报告,我试图让父行信息和一行中的所有孩子都在一个家庭中显示。 没有“家长”表存储父母的信息,没有将家长链接到孩子的ID,也没有将兄弟姐妹链接到兄弟姐妹的ID。判断他们是否是兄弟姐妹的唯一方法是如果他们具有相同的地址(逻辑是如果他们具有相同的地址,他们住在一起并且是同一家庭的一部分)。所有信息都是从学生表或学生表中存储父母信息,他们居住的地址等的自定义字段中提取的。在一行上显示多列(SQL)

而不是显示父信息两次我想显示 这样的: PARENT_NAME,地址,电话,child1_name,child1_schoolname,child1_age,child2_name,child2_schoolname,child2_age等(家中的每一个孩子)

的问题是,并不是每家每户都会有孩子,我同样数量的只能通过他们的地址链接兄弟姐妹。

如何在一行中显示每个家庭的所有信息?这是可能的和如何?我尝试了数据透视表,但无济于事。

+3

您应该修改您的问题并提供样本数据和所需结果。 –

+1

我想你想要的是一个数据透视表 – jhilden

+0

我试过透视表,但我不想聚合数据,并且没有连接字段。我可能不知道数据透视表的功能,但在这种情况下数据透视表并没有帮助。 – Kayla

回答

0

这是一个经典的'你不应该在数据库中做报告'的问题。数据库用于数据检索,而不是数据格式化。但让我们假设你知道这一点,并且出于某种原因无论如何都需要这样做。

我会使用,这将是

  1. 创建整个数据的一些窗口查询算法;按地址分组(可加入的值)和sort by age desc
  2. 创建一个查询,利用此窗口并返回每个组中的第一个项目。
  3. 创建其他查询,返回每个组中的第二,第三,第四个。等等。
  4. 外加这些在一起。

如果您定义一些最大数量的兄弟姐妹(五?)而不是动态构建这些兄弟姐妹,这将变得容易得多。

如果父母在同一张桌子上,你怎么知道哪些是父母,哪些是孩子?

0

如果你有两个表一个是父(第一台)和一个儿童(第二次表)如下:

enter image description here

中你可以做这样的事情你数据模型:

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 . 

,你将有输出查询结果:

enter image description here

LISTAGG是你的解决方案,它工作,只要你想引进一个muliple行。

但是,listagg与数据库11g和最新版本 兼容,所以如果您有旧版本,这是行不通的。

希望得到这个帮助。

+0

有用的两个表,但我只有一个。 – Kayla

+0

你也可以这样做。 – Anastasis