cari
Rumahpangkalan datatutorial mysqlBagaimana untuk Menggabungkan Berbilang Baris SQL menjadi Satu dengan Lajur Dijana Secara Dinamik Berdasarkan Lajur Pengumpulan?

How to Merge Multiple SQL Rows into One with Dynamically Generated Columns Based on a Grouping Column?

Jana lajur secara dinamik berdasarkan kumpulan lajur dan gabungkan berbilang baris data SQL

Soalan:

Bagaimana untuk mengumpulkan data mengikut lajur tertentu dan menggabungkan berbilang baris dengan nilai lajur yang sama ke dalam satu baris, menjana berbilang lajur pada masa yang sama? Khususnya, anda perlu mengumpulkan mengikut lajur "TestType" dan membahagi lajur "Result" kepada lajur berasingan untuk setiap nilai "TestType" yang sepadan.

Jawapan:

Ini boleh dicapai menggunakan Crosstab (PIVOT) dalam SQL Server. Walau bagaimanapun, jika bilangan lajur bagi setiap kumpulan adalah dinamik (iaitu mungkin berubah), penyelesaian yang lebih fleksibel diperlukan:

Penyelesaian dinamik menggunakan FOR XML PATH:

Buat CTE dengan nombor baris:

WITH RNs AS (
    SELECT WorkOrder,
           TestType,
           Result,
           ROW_NUMBER() OVER (PARTITION BY WorkOrder, TestType ORDER BY (SELECT NULL)) AS RN
    FROM dbo.Result
)

Bina pernyataan SQL dinamik:

DECLARE @SQL nvarchar(MAX);
DECLARE @CRLF nvarchar(2) = CHAR(13) + CHAR(10); --回车换行符

-- 获取任何“TestType”的最大结果数
SELECT @MaxTally = MAX(C)
FROM (
    SELECT COUNT(*) AS C
    FROM dbo.Result
    GROUP BY WorkOrder,
             TestType
);

-- 创建具有最大行数的计数表
WITH Tally AS (
    SELECT TOP (@MaxTally) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
    FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N),
         (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)
)

-- 构建动态SQL语句
SELECT @SQL = N'WITH RNs AS (' + @CRLF +
              N'    SELECT WorkOrder, ' + @CRLF +
              N'           TestType, ' + @CRLF +
              N'           Result, ' + @CRLF +
              N'           ROW_NUMBER() OVER (PARTITION BY WorkOrder, TestType ORDER BY (SELECT NULL)) AS RN ' + @CRLF +
              N'    FROM dbo.Result)' + @CRLF +
              N'SELECT WorkOrder, ' + @CRLF +
              N'       TestType, ' + @CRLF +
              -- 使用FOR XML PATH动态生成列
              STUFF((SELECT N',' + @CRLF +
                            CONCAT(N'       MAX(CASE RN WHEN ',T.I,N' THEN Result END) AS Result',T.I)
                     FROM Tally T
                     ORDER BY T.I ASC
                     FOR XML PATH(N''), TYPE).value('(./text())[1]','nvarchar(MAX)'),1,3,N'') + @CRLF +
              N'FROM RNs R ' + @CRLF +
              N'GROUP BY WorkOrder, ' + @CRLF +
              N'         TestType;'

Laksanakan pernyataan SQL dinamik:

PRINT @SQL; -- 查看SQL语句

EXEC sys.sp_executesql @SQL;

Penyelesaian ini akan menjana lajur secara dinamik berdasarkan bilangan keputusan maksimum untuk setiap "TestType", menghasilkan output yang diingini. Pembolehubah @CRLF telah ditambahkan pada kod untuk kebolehbacaan kod yang lebih baik dan keserasian merentas platform yang dipertingkatkan.

Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Berbilang Baris SQL menjadi Satu dengan Lajur Dijana Secara Dinamik Berdasarkan Lajur Pengumpulan?. 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
Apakah batasan menggunakan pandangan di MySQL?Apakah batasan menggunakan pandangan di MySQL?May 14, 2025 am 12:10 AM

Mysqlviewshavelimitations: 1) theDon'tsupportallsqloperations, bintikDatamanipulationThroughviewswithjoinsorsubqueries.2) merekacanimpactperformance, terutamanya dengan komplekssum

Faktor apa yang mempengaruhi bilangan pencetus yang boleh saya gunakan di MySQL?Faktor apa yang mempengaruhi bilangan pencetus yang boleh saya gunakan di MySQL?May 14, 2025 am 12:08 AM

Mysqldoes'timposeahardlimitontriggers, butpracticalfactorsDeterminetheirefectiveus

MySQL: Adakah selamat untuk menyimpan gumpalan?MySQL: Adakah selamat untuk menyimpan gumpalan?May 14, 2025 am 12:07 AM

Ya, It'sSsafetostoreBlobDatainMysql, ButConserthySefactors: 1) Storagespace: BlobScanconsumesignificantspace, PotensiCreaseScostSandSlowingPerformance.2)

MySQL: Menambah pengguna melalui antara muka web PHPMySQL: Menambah pengguna melalui antara muka web PHPMay 14, 2025 am 12:04 AM

Menambah pengguna MySQL melalui antara muka web PHP boleh menggunakan sambungan MySQLI. Langkah -langkah adalah seperti berikut: 1. Sambungkan ke pangkalan data MySQL dan gunakan sambungan MySQLI. 2. Buat pengguna, gunakan pernyataan CreateUser, dan gunakan fungsi kata laluan () untuk menyulitkan kata laluan. 3. Mencegah suntikan SQL dan gunakan fungsi mysqli_real_escape_string () untuk memproses input pengguna. 4. Berikan kebenaran kepada pengguna baru dan gunakan pernyataan geran.

MySQL: Blob dan penyimpanan No-SQL yang lain, apakah perbezaannya?MySQL: Blob dan penyimpanan No-SQL yang lain, apakah perbezaannya?May 13, 2025 am 12:14 AM

Mysql'sblobissusuipableforstoringbinarydatawithinarelationaldatabase, sementara

MySQL Tambah Pengguna: Sintaks, Pilihan, dan Amalan Terbaik KeselamatanMySQL Tambah Pengguna: Sintaks, Pilihan, dan Amalan Terbaik KeselamatanMay 13, 2025 am 12:12 AM

Toaddauserinmysql, gunakan: createuser'username '@' host'identifiedby'password '; here'showtodoitsecurely: 1) choosethehostcareflelytocon trolaccess.2) SetResourcelImitSwithOptionsLikeMax_queries_per_hour.3) USESTRONG, UNIQUEPASSWORDS.4) Enforcessl/TLSConnectionswith

MySQL: Bagaimana untuk mengelakkan jenis data rentetan kesilapan biasa?MySQL: Bagaimana untuk mengelakkan jenis data rentetan kesilapan biasa?May 13, 2025 am 12:09 AM

Toavoidcommonmistakeswithstringdatatypesinmysql, fahamistringtypenuances, choosetherighttype, danManageencodingandcollationsettingsefectively.1) usecharfarfixed-lengthstrings, varcharforvariable-length, andtext/blobforlargerdata.2)

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!