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>
注意:
套用於您的查詢:
要轉置您的特定查詢,您可以使用以下修改後的程式碼:
<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中文網其他相關文章!