2014-04-25 37 views
1

我已經拿到了一個查詢的Oracle SQL旋轉選項

這給下面的輸出

enter image description here

這裏是一個樣本數據。我標記了兩行包含相同的手機號碼。如果我想將行合併到一個手機號碼及其相應的數據中,我希望執行以下操作。我怎樣才能做到這一點?

回答

1

您可以使用LISTAGG analytic function來做到這一點。關於它的好的提示(和其他方法來達到你的結果)可以找到here

讓我試着勾畫一個簡化的解決方案。比方說,您的查詢看起來像這樣 - 我不喜歡在where子句中加入=)

select gsm.mobile_no, sgcp.name as "charge name" 
from service.gsm gsm 
join charge.gsm_charge_plan sgcp 
on sgcp.service_code = gsm.code; 

然後,你可以做這樣的事情

SELECT gsm.mobile_no, 
LISTAGG(sgcp.name, ',') WITHIN GROUP (ORDER BY sgcp.name) AS "charge names" 
from service.gsm gsm 
join charge.gsm_charge_plan sgcp 
on sgcp.service_code = gsm.code 
GROUP BY gsm.mobile_no; 
+0

嗨,這很不錯。但是,你可以把結果放在不同的列中,因爲現在它將它們分組在同一列中? – user3017335

+0

@ user3017335這是不可能的。試想一下,如果一個手機號碼有10行關聯。您需要10個不同的「費用名稱」列。 SQL通常不支持動態列計數。您必須查看手動編碼的固定列數解決方案或使用不同的方法。 – SebastianH

0

你可以嘗試 - 由集團gsm.mobile_no?

+0

這將等於簡單地刪除獨特的列(如上面示例中的「收費名稱」)。我懷疑這是有意的。 – SebastianH

+0

你的方式當然更好:) – LuckySevens