MySQL
Pivotfrågor
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;
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow