Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Pivot Berbilang Lajur dalam T-SQL untuk Membentuk Semula Data untuk Pelaporan?

Bagaimana untuk Pivot Berbilang Lajur dalam T-SQL untuk Membentuk Semula Data untuk Pelaporan?

DDD
DDDasal
2025-01-05 09:52:43254semak imbas

How to Pivot Multiple Columns in T-SQL to Reshape Data for Reporting?

Mengasingkan Berbilang Lajur dalam TSQL

Apabila bekerja dengan pangkalan data hubungan, selalunya perlu untuk membentuk semula data untuk tujuan pelaporan. Pivoting ialah teknik yang boleh digunakan untuk mengubah data daripada struktur berorientasikan baris kepada berorientasikan lajur. Artikel ini menunjukkan cara untuk memutar berbilang lajur dalam jadual sambil mengekalkan semua label yang berkaitan.

Cabaran

Pertimbangkan jadual berikut bernama GRAND_TOTALS:

RATIO RESULT SCORE GRADE
Current Ratio 1.294 60 Good
Gearing Ratio 0.3384 70 Good
Performance Ratio 0.0427 50 Satisfactory
TOTAL NULL 180 Good

Objektifnya adalah untuk memutarkan lajur RESULT, SCORE dan GRED, menghasilkan jadual dengan format berikut:

RATIO Current Ratio Gearing Ratio Performance Ratio TOTAL
Result 1.294 0.3384 0.0427 NULL
Score 60 70 50 180
Grade Good Good Satisfactory Good

Penyelesaian

Untuk memutar berbilang lajur dengan berkesan, pertimbangkan langkah berikut:

  1. Nyahpaut Keputusan, Skor dan Gred Lajur:

    Nyahpaut melibatkan penukaran berbilang lajur ke dalam satu lajur sambil menjejaki nama lajur asal. Ini boleh dicapai menggunakan klausa UNPIVOT. Sintaks di bawah menunjukkan cara untuk menyahpangsi lajur:

    select ratio, col, value
    from GRAND_TOTALS
    cross apply
    (
      select 'result', cast(result as varchar(10)) union all
      select 'score', cast(score as varchar(10)) union all
      select 'grade', grade
    ) c(col, value)

    Pertanyaan ini akan membuat jadual baharu dengan lajur RATIO, COL dan VALUE, dengan COL mewakili nama lajur asal (hasil, skor atau gred ) dan VALUE mengandungi nilai yang sepadan.

  2. Gunakan Fungsi PIVOT:

    Setelah data dinyahpaut, fungsi PIVOT boleh digunakan untuk mengubah data ke dalam format yang diingini. Sintaks untuk pivoting adalah seperti berikut:

    select ratio = col,
      [current ratio], [gearing ratio], [performance ratio], total
    from
    (
      select ratio, col, value
      from GRAND_TOTALS
      cross apply
      (
        select 'result', cast(result as varchar(10)) union all
        select 'score', cast(score as varchar(10)) union all
        select 'grade', grade
      ) c(col, value)
    ) d
    pivot
    (
      max(value)
      for ratio in ([current ratio], [gearing ratio], [performance ratio], total)
    ) piv;

    Dalam pertanyaan ini, fungsi PIVOT mengumpulkan baris mengikut lajur RATIO dan memaksi data menggunakan nilai COL sebagai pengepala lajur. Fungsi agregat MAX digunakan untuk mendapatkan nilai terkini bagi setiap baris.

Hasil

Melaksanakan pertanyaan di atas akan menghasilkan jadual pangsi yang diingini :

RATIO Current Ratio Gearing Ratio Performance Ratio TOTAL
grade Good Good Satisfactory Good
result 1.29400 0.33840 0.04270 NULL
score 60.00000 70.00000 50.00000 180.00000

Jadual ini mengekalkan semua label yang diperlukan dan berjaya memutarkan lajur yang dikehendaki.

Atas ialah kandungan terperinci Bagaimana untuk Pivot Berbilang Lajur dalam T-SQL untuk Membentuk Semula Data untuk Pelaporan?. 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