2015-11-07 66 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