當我們需要處理訂單的時候可能會有這樣的奇怪的需求:把訂單明細裡的商品種類顯示出來,例如乙個訂單包括圖書,花生油,自行車,當我們存放的時候是分別存放到訂單明細中的,當我們取得時候需要一起提取。這就涉及到乙個合併列的概念。
一、訂單表和訂單詳情表分開(總分結構):
oracle 10g提供的方法是:
select t.order_id as order_id,
wmsys.wm_concat(t.goods_name) as goods_name
from tab_order_detail_info t
group by t.order_id;
wmsys.wm_concat(name)
方法是非常靈活的,預設採用
』,』進行分割,一般都是 結合
group by
進行使用。
得到的結果就是: 436 圖書,花生油,自行車。
二、訂單表和訂單詳情表沒分開(總總結構):
sys_connect_by_path(
欄位名, 2
個字段之間的連線符號
),注意這裡的連線符號不要使用逗號,
oracle
會報錯,如果一定要用,可以使用
replace
替換一下,方法如下
repalce(
欄位名,
原字元,',')。
樹: startwith
條件1connect by prior 條件2
條件1 子
=xx (
或父=xx) 條件
2 若: 子
-->根(
倒樹)
則為connectby
子= prior
根; 若:根
--> 子(
正樹)
則connect
根= prior 子。
根節點並不一定是在資料庫中設計的頂級節點,而是start with開始的地方。函式就是從start with開始的地方開始遍歷,並記下其遍歷到的節點,start with開始的地方被視為根節點,將遍歷到的路徑根據函式中的分隔符,組成乙個新的字串。sys_connect_by_path函式用connect by來尋找下一條記錄,直到迭代找不到相應記錄為止。概念與遞迴類似,connect by指定遞迴(連線)條件,如果條件不滿足則遞迴結束。
三、select listagg(t.order_id,',') within group (order by t.order_id)col_name from tab_order_info;
(11g
以後)
Oracle 生成合併行報表
平常我們在查詢的時候往往會通過表之間的關聯得到想要的資訊,而在實際情況中出現最多的莫過於主表跟子表進行關聯查詢。在這種一對多的關聯查詢中難免會出現主表中的某些字段資料重複出現,就像下面這種情況 這是乙個普通的關聯查詢,是用來給倉管員核對7月到9月的領用物資用的,所以這裡需要關聯盡量多可讀的資訊出來。...
使用ConyEdit合併行
文字編輯中,有時候需要把兩個檔案的行並列合併到一起,這個時候可以寫乙個指令碼實現,也可以把資料拷到excel中,用公式拼接好,再拷貝回來,略顯麻煩。這裡介紹另外一種實現,利用conyedit 乙個文字編輯器外掛程式 實現拼接,資料原地處理,比較簡單。在conyedit在後台執行的情況下,在需要處理的...
Vim的合並行操作
日常常用到多行合併的功能,記錄如下 第一種,多行合併成一行,即 aaaaa bbbbb ccccc 合併為 aaaaa bbbbb ccccc 方法1 normal狀態下3j其中的3是範圍,可以是書籤或者搜尋位置等方式實現,j為合併 注 如果改為3gj的話,則合併時各行沒有空白aaaaabbbbbc...