Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Pivot Data pada Berbilang Lajur menggunakan Fungsi tab silang() SQL?

Bagaimana untuk Pivot Data pada Berbilang Lajur menggunakan Fungsi tab silang() SQL?

Barbara Streisand
Lepaskan: 2025-01-14 09:57:43
asal
686 orang telah melayarinya

How to Pivot Data on Multiple Columns using SQL's crosstab() Function?

Gunakan Tablefunc untuk melaksanakan pangsi data berbilang lajur

Fungsi crosstab() dalam SQL sering digunakan untuk menukar data format panjang kepada data format lebar. Walau bagaimanapun, ia biasanya menganggap bahawa lajur, kecuali nama baris dan lajur nilai, adalah sama untuk setiap baris dengan nama baris yang sama. Had ini boleh mencipta cabaran apabila bekerja dengan set data dengan lajur tambahan yang berubah-ubah.

Salah satu cara untuk mengendalikan pangsi berbilang variasi ialah membuat jadual sementara dengan lajur nama baris dan sebarang lajur tambahan yang diperlukan. Kemudian, gunakan fungsi crosstab() untuk memutar data, menggunakan lajur nama baris sebagai lajur pengumpulan utama dan lajur tambahan sebagai lajur pengumpulan tambahan.

Sebagai contoh, pertimbangkan sampel data berikut:

<code class="language-sql">CREATE TEMP TABLE t4 (
  timeof   timestamp
 ,entity    character
 ,status    integer
 ,ct        integer);

INSERT INTO t4 VALUES 
  ('2012-01-01', 'a', 1, 1)
 ,('2012-01-01', 'a', 0, 2)
 ,('2012-01-02', 'b', 1, 3)
 ,('2012-01-02', 'c', 0, 4);</code>
Salin selepas log masuk

Untuk memutar data ini menggunakan berbilang pembolehubah, anda boleh menggunakan pertanyaan berikut:

<code class="language-sql">SELECT *
FROM   crosstab(
   'SELECT entity, timeof, status, ct
    FROM   t4
    ORDER  BY 1, 2, 3'
 ,$$VALUES (1), (0)$$)
 AS ct ("Attribute" character, "Section" timestamp, "status_1" int, "status_0" int);</code>
Salin selepas log masuk

Pertanyaan ini mengumpulkan data mengikut lajur entity dan timeof dan kemudian berputar pada lajur status dan ct sebagai lajur tambahan. Jadual yang dijana akan dalam format berikut:

<code>Section | Attribute | status_1 | status_0
2012-01-01 00:00:00 | a         | 1         | 2
2012-01-02 00:00:00 | b         | 3         |
2012-01-02 00:00:00 | c         |           | 4</code>
Salin selepas log masuk

Seperti yang kita lihat, lajur tambahan Attribute kini ditunjukkan sebagai lajur berasingan, membolehkan kami membandingkan dengan mudah ukuran berbeza yang diambil pada setiap entiti pada masa tertentu.

Ringkasnya, menggunakan fungsi crosstab() dengan jadual sementara boleh menyediakan kaedah tersuai dan cekap untuk berputar pelbagai variasi. Dengan mengawal susunan lajur, kami boleh menentukan lajur yang dianggap sebagai nama baris, lajur tambahan, lajur kategori dan lajur nilai.

Atas ialah kandungan terperinci Bagaimana untuk Pivot Data pada Berbilang Lajur menggunakan Fungsi tab silang() SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan