首頁 > 資料庫 > mysql教程 > 如何使用 UNPIVOT 和 PIVOT 在 SQL 中轉置表?

如何使用 UNPIVOT 和 PIVOT 在 SQL 中轉置表?

Barbara Streisand
發布: 2025-01-14 21:06:44
原創
522 人瀏覽過

How to Transpose Tables in SQL Using UNPIVOT and PIVOT?

SQL 表格轉置:UNPIVOT 與 PIVOT 函數的應用

在 SQL 中轉置表格,可以使用 UNPIVOT 和 PIVOT 函數組合實作。 UNPIVOT 函數將列轉換為行,而 PIVOT 函數將行轉換為列。

UNPIVOT 資料

UNPIVOT 函數用於將多列轉換為單列。在範例中,需要將 A 和 B 列進行展開。以下查詢示範了此過程:

<code class="language-sql">select day, col, value
from yourtable
unpivot
(
  value
  for col in (A, B)
) unpiv;</code>
登入後複製

此查詢將建立一個包含三列的新表:day、col 和 value。 col 列將包含列名(A 或 B),value 列將包含來自展開列的對應值。

PIVOT 數據

PIVOT 函數用於將行轉換為列。在本例中,需要將 day 值(Mon、Tue、Wed、Thu、Fri)轉換為欄位:

<code class="language-sql">select *
from
(
  select day, col, value
  from yourtable
  unpivot
  (
    value
    for col in (A, B)
  ) unpiv
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv;</code>
登入後複製

最終查詢將產生期望的輸出:

<code>Value | Mon | Tue | Wed | Thu | Fri
-------|-----|-----|-----|-----|-----
A      | 1   | 3   | 5   | 7   | 9
B      | 2   | 4   | 6   | 8   | 0</code>
登入後複製

將解決方案套用至您的查詢

要將此解決方案套用至您的特定查詢,可以如下修改:

<code class="language-sql">select *
from
(
  select LEFT(datename(dw,datetime),3) as DateWeek,
    col, 
    value
  from DataTable 
  cross apply 
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)
) src
pivot
(
  sum(value)
  for dateweek in (Mon, Tue, Wed, Thu, Fri)
) piv;</code>
登入後複製

此查詢將把您的 DataTable 表中的資料轉置為所需的格式。

以上是如何使用 UNPIVOT 和 PIVOT 在 SQL 中轉置表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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