Szukaj…


Uwagi

Tworzenie zapytań przestawnych w MySQL opiera się na funkcji GROUP_CONCAT() . Jeśli oczekuje się, że wynik wyrażenia tworzącego kolumny zapytania przestawnego będzie duży, wartość zmiennej group_concat_max_len musi zostać zwiększona:

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

Tworzenie zapytania przestawnego

MySQL nie zapewnia wbudowanego sposobu tworzenia zapytań przestawnych. Można je jednak utworzyć za pomocą przygotowanych instrukcji.

Załóżmy, że tabela tbl_values :

ID Nazwa Grupa Wartość
1 Pete ZA 10
2) Pete b 20
3) Jan ZA 10

Żądanie: Utwórz zapytanie, które pokazuje sumę Value dla każdej Name ; Group musi być nagłówkiem kolumny, a Name musi być nagłówkiem wiersza.

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

Wynik:

Nazwa ZA b
Jan 10 ZERO
Pete 10 20

Ważne: cofnij przydział przygotowanego wyciągu, gdy nie będzie już potrzebny:

deallocate prepare stmt;

Przykład na SQL Fiddle



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow