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

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

Barbara Streisand
Barbara Streisand原創
2025-01-14 21:11:50638瀏覽

How to Transpose a Table with Multiple Columns in SQL Server?

SQL Server多列表資料透視方法

在多種情況下,將表轉換為其轉置形式都非常有用。本文重點在於如何在Microsoft SQL Server中轉置具有多個欄位(A、B等)的資料表。

使用UNPIVOT和PIVOT進行資料透視

要轉置表,您可以結合使用UNPIVOT和PIVOT函數:

  • UNPIVOT: 將多列轉換為行,建立一個名為col的新列,其中包含列名(A、B等),以及一個包含對應值的value列。
  • PIVOT: 將col值轉換為列標題,並為每個標題匯總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方法

對於SQL Server 2008以上版本,您也可以使用CROSS APPLY與VALUES組合來解開資料:

<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>

這會將ACalls和BCalls列轉置為行,並為每週的每一天(Mon、Tue等)建立列標題。

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

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