首頁 > 資料庫 > mysql教程 > 如何有效地將行轉換為SQL Server中的列?

如何有效地將行轉換為SQL Server中的列?

DDD
發布: 2025-01-25 14:42:14
原創
660 人瀏覽過

How Can I Efficiently Convert Rows to Columns in SQL Server?

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

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