Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Pivot Data pada Berbilang Lajur menggunakan Fungsi tab silang() SQL?
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>
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>
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>
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!