Sök…


Anmärkningar

Pivot-frågan skapas i MySQL bygger på GROUP_CONCAT() . Om resultatet av uttrycket som skapar kolumnerna i pivotfrågan förväntas bli stort måste värdet på variabeln group_concat_max_len ökas:

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

Skapa en pivotfråga

MySQL tillhandahåller inte ett inbyggt sätt att skapa pivotfrågor. Dessa kan emellertid skapas med förberedda uttalanden.

Antag tabellen tbl_values :

Id namn Grupp Värde
1 Pete EN 10
2 Pete B 20
3 John EN 10

Begäran: Skapa en fråga som visar summan av Value för varje Name ; Group måste vara kolumnrubrik och Name måste vara radrubriken.

-- 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;

Resultat:

namn EN B
John 10 NULL
Pete 10 20

Viktigt: Fördela ut det förberedda uttalet när det inte längre behövs:

deallocate prepare stmt;

Exempel på SQL Fiddle



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow