Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Pivot Baris ke Lajur dalam SQL Tanpa Pengagregatan?

Bagaimana untuk Pivot Baris ke Lajur dalam SQL Tanpa Pengagregatan?

Mary-Kate Olsen
Lepaskan: 2025-01-08 00:21:41
asal
714 orang telah melayarinya

How to Pivot Rows to Columns in SQL Without Aggregation?

operasi baris ke lajur SQL tanpa fungsi agregat

Dalam pemprosesan data, menukar data baris kepada data lajur (baris ke lajur) adalah keperluan biasa, yang amat berguna untuk meringkaskan atau menganalisis data berdasarkan berbilang atribut.

Fungsi PIVOT dalam SQL boleh melaksanakan operasi baris ke lajur. Walau bagaimanapun, fungsi PIVOT selalunya perlu digabungkan dengan fungsi agregat (seperti MAX atau MIN) untuk mengendalikan nilai pangsi. Tetapi dalam beberapa kes, kami ingin melakukan pemutaran nilai mudah tanpa sebarang operasi pengagregatan.

Sebagai contoh, pertimbangkan jadual bernama "TEST" dengan lajur berikut:

  • TEST_NAME
  • SBNO
  • VAL

Lajur VAL mengandungi pelbagai jenis data (integer, perpuluhan atau varchar). Matlamatnya adalah untuk mengubah lajur TEST_NAME kepada tiga lajur berasingan (Ujian1, Ujian2 dan Ujian3) tanpa sebarang pengagregatan:

<code>源表

╔═══════════╦══════╦═══════╗
║ TEST_NAME ║ SBNO ║  VAL  ║
╠═══════════╬══════╬═══════╣
║ Test1     ║    1 ║ 0.304 ║
║ Test1     ║    2 ║ 0.31  ║
║ Test1     ║    3 ║ 0.306 ║
║ Test2     ║    1 ║ 2.3   ║
║ Test2     ║    2 ║ 2.5   ║
║ Test2     ║    3 ║ 2.4   ║
║ Test3     ║    1 ║ PASS  ║
║ Test3     ║    2 ║ PASS  ║
╚═══════════╩══════╩═══════╝</code>
Salin selepas log masuk
<code>目标输出

╔══════════════════════════╗
║ SBNO Test1 Test2   Test3 ║
╠══════════════════════════╣
║ 1    0.304  2.3    PASS  ║
║ 2    0.31   2.5    PASS  ║
║ 3    0.306  2.4    NULL  ║
╚══════════════════════════╝</code>
Salin selepas log masuk

Untuk mencapai ini tanpa menggunakan sebarang fungsi agregat, kita boleh menggunakan SQL dinamik:

<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(TEST_NAME)
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)')
        ,1,1,'')

set @query = 'SELECT sbno,' + @cols + '
             from
             (
                select test_name, sbno, val
                from yourtable
            ) x
            pivot
            (
                max(val)
                for test_name in (' + @cols + ')
            ) p '

execute(@query)</code>
Salin selepas log masuk

Pertanyaan ini menjana pernyataan SQL dinamik yang mengandungi semua nilai unik TEST_NAME sebagai nama lajur. Ia kemudian menggunakan fungsi PIVOT untuk menukar data baris kepada lajur tanpa menggunakan sebarang pengagregatan.

Menjalankan SQL ini akan menghasilkan output yang diingini, iaitu jadual dengan lajur pangsi Test1, Test2 dan Test3 yang mengandungi nilai VAL yang sepadan daripada jadual asal.

Output yang disemak ini mengekalkan makna asal sambil menggunakan perkataan dan struktur ayat yang sedikit berbeza. Butiran teknikal kekal tidak berubah.

Atas ialah kandungan terperinci Bagaimana untuk Pivot Baris ke Lajur dalam SQL Tanpa Pengagregatan?. 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