Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Memindahkan Jadual Penuh dalam MS SQL Menggunakan UNPIVOT dan PIVOT?

Bagaimanakah Saya Boleh Memindahkan Jadual Penuh dalam MS SQL Menggunakan UNPIVOT dan PIVOT?

Susan Sarandon
Susan Sarandonasal
2025-01-14 20:57:44319semak imbas

How Can I Transpose a Full Table in MS SQL Using UNPIVOT and PIVOT?

MS SQL Server: Lengkapkan Transposisi Jadual dengan UNPIVOT dan PIVOT

Memindahkan jadual dengan berbilang lajur dalam MS SQL Server memerlukan pendekatan gabungan menggunakan fungsi UNPIVOT dan PIVOT. UNPIVOT membentuk semula berbilang lajur menjadi baris, manakala PIVOT menukar kembali nilai baris kepada lajur.

Panduan Langkah demi Langkah:

  1. Data Nyahpaut:

    Langkah ini menukar data lajur anda kepada baris. Gantikan yourtable, A, B, value dan col dengan nama jadual dan lajur sebenar anda.

    <code class="language-sql">SELECT day, col, value
    FROM yourtable
    UNPIVOT
    (
        value
        FOR col IN (A, B)
    ) unpiv</code>
  2. Data Pivoting:

    Di sini, data baris diputar semula ke dalam lajur. Laraskan Mon, Tue, Wed, Thu, Fri untuk memadankan nama lajur khusus anda (hari dalam minggu dalam contoh ini).

    <code class="language-sql">SELECT *
    FROM (SELECT * FROM ...) src  -- Replace ... with the UNPIVOT query from step 1
    PIVOT
    (
        MAX(value)
        FOR day IN (Mon, Tue, Wed, Thu, Fri)
    ) piv</code>
  3. Integrasi ke dalam Pertanyaan Sedia Ada:

    Untuk menukar data dalam pertanyaan sedia ada, gabungkan operasi UNPIVOT dan PIVOT:

    <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>

Contoh menggunakan PIVOT dan CROSS APPLY (SQL Server 2008 dan kemudian):

Contoh ini memanfaatkan CROSS APPLY untuk penyelesaian yang lebih ringkas.

<code class="language-sql">SELECT day, col, value
FROM yourtable
CROSS APPLY
(
    VALUES ('A', ACalls), ('B', BCalls)
) c (col, value)
PIVOT
(
    MAX(value)
    FOR day IN (Mon, Tue, Wed, Thu, Fri)
) piv</code>

Pertimbangan Penting:

  • Lajur col dalam hasil yang tidak dipangsi memaparkan nama lajur asal.
  • Fungsi MAX() boleh digantikan dengan fungsi agregat lain (seperti SUM(), AVG(), dsb.) berdasarkan keperluan data anda.

Panduan komprehensif ini menunjukkan cara mengubah keseluruhan jadual dalam MS SQL Server dengan berkesan, menawarkan fleksibiliti dan kebolehsuaian untuk pelbagai senario manipulasi data.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memindahkan Jadual Penuh dalam MS SQL Menggunakan UNPIVOT dan PIVOT?. 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