首頁 >資料庫 >mysql教程 >如何轉置具有多列的 SQL 表?

如何轉置具有多列的 SQL 表?

DDD
DDD原創
2025-01-14 20:52:47292瀏覽

How to Transpose a SQL Table with Multiple Columns?

將包含多個欄位的 SQL 表格轉置

問題:

您需要將一個包含多個欄位的 SQL 表格轉置,例如:

<code>Day  A  B 
---------
Mon  1  2
Tue  3  4
Wed  5  6
Thu  7  8
Fri  9  0</code>

轉置成以下格式:

<code>Value Mon Tue Wed Thu Fri 
--------------------------
A      1   3   5   7   9
B      2   4   6   8   0</code>

解:

要轉置包含多個欄位的表格,您可以結合使用 UNPIVOT 和 PIVOT 函數。

  1. UNPIVOT: 將多列 (A, B) 轉換為行,並新增一列用於表示列名:
<code class="language-sql">select day, col, value
from yourtable
unpivot
(
  value
  for col in (A, B)
) unpiv</code>
  1. PIVOT: 將 "day" 值轉換為列,並聚合 "value" 列:
<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>

這將產生所需的轉置表。

附加說明:

  • 如果您的 SQL Server 版本為 2008 或更高版本,您可以使用 CROSS APPLY 和 VALUES 來取代 UNPIVOT 函數轉置資料:
<code class="language-sql">select *
from
(
  select day, col, value
  from yourtable
  cross apply
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv</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>

以上是如何轉置具有多列的 SQL 表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn