Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Jadual SQL dengan Berbilang Lajur?

Bagaimana untuk Mengubah Jadual SQL dengan Berbilang Lajur?

DDD
DDDasal
2025-01-14 20:52:47293semak imbas

How to Transpose a SQL Table with Multiple Columns?

Ubah jadual SQL dengan berbilang lajur

Soalan:

Anda perlu menukar jadual SQL dengan berbilang lajur, contohnya:

<code>Day  A  B 
---------
Mon  1  2
Tue  3  4
Wed  5  6
Thu  7  8
Fri  9  0</code>

Ubah kepada format berikut:

<code>Value Mon Tue Wed Thu Fri 
--------------------------
A      1   3   5   7   9
B      2   4   6   8   0</code>

Penyelesaian:

Untuk menukar jadual dengan berbilang lajur, anda boleh menggunakan fungsi UNPIVOT dan PIVOT bersama-sama.

  1. UNPIVOT: Tukar berbilang lajur (A, B) ke dalam baris dan tambah lajur untuk nama lajur:
<code class="language-sql">select day, col, value
from yourtable
unpivot
(
  value
  for col in (A, B)
) unpiv</code>
  1. PIVOT: Tukar nilai "hari" kepada lajur dan agregat lajur "nilai":
<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>

Ini akan menjana jadual transposed yang diperlukan.

Nota tambahan:

  • Jika versi SQL Server anda adalah 2008 atau lebih tinggi, anda boleh menggunakan CROSS APPLY dan VALUES dan bukannya fungsi UNPIVOT untuk menukar data:
<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>
  • Untuk melaksanakan operasi transpose pada pertanyaan khusus anda, anda boleh menggunakan kod yang serupa dengan struktur berikut:
<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>

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Jadual SQL dengan Berbilang Lajur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn