Zoeken…


Opmerkingen

Het maken van GROUP_CONCAT() in MySQL is afhankelijk van de functie GROUP_CONCAT() . Als verwacht wordt dat het resultaat van de uitdrukking die de kolommen van de group_concat_max_len , groot is, moet de waarde van de variabele group_concat_max_len worden verhoogd:

set session group_concat_max_len = 1024 * 1024; -- This should be enough for most cases

Een pivotquery maken

MySQL biedt geen ingebouwde manier om spilquery's te maken. Deze kunnen echter worden gemaakt met behulp van voorbereide verklaringen.

Stel dat de tabel tbl_values :

ID kaart Naam Groep Waarde
1 Pete EEN 10
2 Pete B 20
3 John EEN 10

Verzoek: maak een query die de som van de Value voor elke Name toont; de Group moet de kolomkop zijn en de Name moet de rijkop zijn.

-- 1. Create an expression that builds the columns
set @sql = (
    select group_concat(distinct 
        concat(
            "sum(case when `Group`='", Group, "' then `Value` end) as `", `Group`, "`"
        )
    ) 
    from tbl_values
);

-- 2. Complete the SQL instruction
set @sql = concat("select Name, ", @sql, " from tbl_values group by `Name`");

-- 3. Create a prepared statement
prepare stmt from @sql;

-- 4. Execute the prepared statement
execute stmt;

Resultaat:

Naam EEN B
John 10 NUL
Pete 10 20

Belangrijk: Wijs de voorbereide verklaring toe als deze niet langer nodig is:

deallocate prepare stmt;

Voorbeeld op SQL Fiddle



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow