首頁 > 資料庫 > mysql教程 > 如何在 Oracle 中將行透視為列:DECODE 與 PIVOT?

如何在 Oracle 中將行透視為列:DECODE 與 PIVOT?

Mary-Kate Olsen
發布: 2025-01-03 01:09:39
原創
854 人瀏覽過

How to Pivot Rows to Columns in Oracle: DECODE vs. PIVOT?

如何在Oracle 中將資料從行轉換為列:透視解決方案

Oracle 資料庫提供了將資料從行重組為列的通用技術,這一過程稱為透視。當資料以狹窄的格式組織時,這種轉換就變得必要,並且需要以更廣泛的視圖呈現它。

為了完成行到列的轉換,Oracle 提供了兩種方法:

Oracle 10g 中的DECODE 函數

在早期版本的Oracle (10g) 中,可以使用DECODE 函數實現透視。考慮以下表格結構:

LOAN NUMBER DOCUMENT_TYPE DOCUMENT_ID
992452533663 Voters ID XPD0355636
992452533663 Pan card CHXPS5522D
992452533663 Drivers licence DL-0420110141769

要透視此數據,您可以使用DECODE 函數,如下所示:

SELECT
    loan_number,
    MAX(DECODE(document_type, 'Voters ID', document_id)) AS voters_id,
    MAX(DECODE(document_type, 'Pan card', document_id)) AS pan_card,
    MAX(DECODE(document_type, 'Drivers licence', document_id)) AS drivers_licence
  FROM
    doc_tab
GROUP BY loan_number
ORDER BY loan_number;
登入後複製

此查詢按貸款編號對數據進行分組並使用嵌入套DECODE用於將文檔ID 指派給特定文檔類型的函數。 MAX 函數為每個貸款文件組合傳回所需的單一值。

Oracle 11g 及更高版本中的 PIVOT 子句

Oracle 11g 引入了專用的 PIVOT 子句來簡化行到列的轉換。以下查詢示範了其用法:

SELECT *
  FROM doc_tab
PIVOT (
  MAX(document_id) FOR document_type IN ('Voters ID','Pan card','Drivers licence')
);
登入後複製

此查詢中的 PIVOT 子句明確定義要在轉換結果中建立的資料列。它會根據指定的文檔類型自動對資料進行分組,並組合匹配的文檔 ID。

要進一步了解 Oracle中的資料透視技術,請參考以下資源:

  • [Tim霍爾關於轉向的文章Oracle](https://www.oracle.com/technetwork/database/oracle-magazine/oracle -11g-pivot-127859.html)
  • [比較兩種解的SQLFiddle 範例](https://www .sqlfiddle.com/#!5/7956/2/0)

以上是如何在 Oracle 中將行透視為列:DECODE 與 PIVOT?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板