SQL Server中高效率的行轉列轉換方法
在SQL Server中,將行轉換為列有多種方法。
使用PIVOT函數
PIVOT函數可以將資料從行轉置為列。 以下是一個使用PIVOT的查詢範例:
<code class="language-sql">select Firstname, Amount, PostalCode, LastName, AccountNumber from ( select value, columnname from yourtable ) d pivot ( max(value) for columnname in (Firstname, Amount, PostalCode, LastName, AccountNumber) ) piv;</code>
此查詢將輸出以下結果:
FirstName | Amount | PostalCode | LastName | AccountNumber |
---|---|---|---|---|
John | 2.4 | ZH1E4A | Fork | 857685 |
請注意,對於大型資料集,PIVOT函數的效率可能較低。
使用聚合函數和CASE表達式
如果PIVOT不適用,可以使用聚合函數和CASE表達式,如下所示:
<code class="language-sql">select max(case when columnname = 'FirstName' then value end) Firstname, max(case when columnname = 'Amount' then value end) Amount, max(case when columnname = 'PostalCode' then value end) PostalCode, max(case when columnname = 'LastName' then value end) LastName, max(case when columnname = 'AccountNumber' then value end) AccountNumber from yourtable</code>
此查詢將產生與PIVOT查詢相同的結果。
使用多個JOIN連接
另一種方法是使用多個JOIN連接,如下所示:
<code class="language-sql">select fn.value as FirstName, a.value as Amount, pc.value as PostalCode, ln.value as LastName, an.value as AccountNumber from yourtable fn left join yourtable a on fn.somecol = a.somecol and a.columnname = 'Amount' left join yourtable pc on fn.somecol = pc.somecol and pc.columnname = 'PostalCode' left join yourtable ln on fn.somecol = ln.somecol and ln.columnname = 'LastName' left join yourtable an on fn.somecol = an.somecol and an.columnname = 'AccountNumber' where fn.columnname = 'Firstname'</code>
請注意,對於大型資料集,使用多個JOIN連接的效率可能不高。 選擇哪種方法取決於您的特定數據和效能要求。
以上是如何有效地將行轉換為SQL Server中的列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!