首頁 > 資料庫 > mysql教程 > 如何在 SQL 中轉置多列表?

如何在 SQL 中轉置多列表?

Patricia Arquette
發布: 2025-01-14 21:01:43
原創
555 人瀏覽過

How Can I Transpose a Multi-Column Table in SQL?

SQL Server 多列表轉置

表格轉置是指將行轉換為列,列轉換為行。當您需要透視數據以進行分析或演示時,這尤其有用。

問題:

您要轉置一個包含多列的表,將其從以下格式:

Day A B
Mon 1 2
Tue 3 4
Wed 5 6
Thu 7 8
Fri 9 0

轉換為以下格式:

Value Mon Tue Wed Thu Fri
A 1 3 5 7 9
B 2 4 6 8 0

解:

要在 SQL 中轉置多個列表,您可以結合使用 UNPIVOT 和 PIVOT 函數。

1. UNPIVOT:

UNPIVOT 函數透過將列轉換為行來反規範化資料。這將建立一個包含三列的新表:day、col 和 value。

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

2. PIVOT:

然後,PIVOT 函數透過將 day 值轉換為列來重新規範化資料。這將產生轉置後的表。

<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>
登入後複製

注意:

  • PIVOT 查詢中使用了 MAX 聚合函數,以確保正確處理重複值。
  • 對於 SQL Server 2008 及更高版本,您可以使用具有 VALUES 語法的 CROSS APPLY 來反轉數據,而不是 UNPIVOT。

套用於您的查詢:

要轉置您的特定查詢,您可以使用以下修改後的程式碼:

<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中文網其他相關文章!

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