我已經拿到了一個查詢的Oracle SQL旋轉選項
這給下面的輸出
這裏是一個樣本數據。我標記了兩行包含相同的手機號碼。如果我想將行合併到一個手機號碼及其相應的數據中,我希望執行以下操作。我怎樣才能做到這一點?
我已經拿到了一個查詢的Oracle SQL旋轉選項
這給下面的輸出
這裏是一個樣本數據。我標記了兩行包含相同的手機號碼。如果我想將行合併到一個手機號碼及其相應的數據中,我希望執行以下操作。我怎樣才能做到這一點?
您可以使用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;
你可以嘗試 - 由集團gsm.mobile_no?
這將等於簡單地刪除獨特的列(如上面示例中的「收費名稱」)。我懷疑這是有意的。 – SebastianH
你的方式當然更好:) – LuckySevens
嗨,這很不錯。但是,你可以把結果放在不同的列中,因爲現在它將它們分組在同一列中? – user3017335
@ user3017335這是不可能的。試想一下,如果一個手機號碼有10行關聯。您需要10個不同的「費用名稱」列。 SQL通常不支持動態列計數。您必須查看手動編碼的固定列數解決方案或使用不同的方法。 – SebastianH