Heim > Datenbank > MySQL-Tutorial > Wie kann man MySQL-Zeilen dynamisch in Spalten umwandeln?

Wie kann man MySQL-Zeilen dynamisch in Spalten umwandeln?

Mary-Kate Olsen
Freigeben: 2025-01-25 13:12:16
Original
774 Leute haben es durchsucht

How to Dynamically Pivot MySQL Rows into Columns?

Dynamische MySQL-Zeilen-zu-Spalten-Operation

Frage:

Rufen Sie Daten aus mehreren Tabellen ab und formatieren Sie sie in eine Pivot-Tabelle mit dynamischen Spaltenüberschriften, auch wenn die genaue Anzahl der Spalten nicht im Voraus bekannt ist.

Ursprüngliche Abfrage:

<code class="language-sql">SELECT partners.name, products.name, COUNT(*) 
FROM sales
JOIN products ON sales.products_id = products.id
JOIN partners ON sales.partners_id = partners.id
GROUP BY sales.partners_id, sales.products_id
LIMIT 0, 30</code>
Nach dem Login kopieren

Lösung mit CASE-Anweisung:

MySQL verfügt nicht über eine PIVOT-Funktion, daher müssen Sie eine Aggregatfunktion mit einer CASE-Anweisung verwenden:

<code class="language-sql">select pt.partner_name,
  count(case when pd.product_name = 'Product A' THEN 1 END) as ProductA,
  count(case when pd.product_name = 'Product B' THEN 1 END) as ProductB,
  count(case when pd.product_name = 'Product C' THEN 1 END) as ProductC,
  count(case when pd.product_name = 'Product D' THEN 1 END) as ProductD,
  count(case when pd.product_name = 'Product E' THEN 1 END) as ProductE
from partners pt
left join sales s
  on pt.part_id = s.partner_id
left join products pd
  on s.product_id = pd.prod_id
group by pt.partner_name</code>
Nach dem Login kopieren

Dynamische Pivot-Tabelle mit vorbereiteten Anweisungen:

Um dynamische Spaltenüberschriften zu verarbeiten, können Sie vorbereitete Anweisungen verwenden:

<code class="language-sql">SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'count(case when Product_Name = ''',
      Product_Name,
      ''' then 1 end) AS ',
      replace(Product_Name, ' ', '')
    )
  ) INTO @sql
from products;

SET @sql = CONCAT('SELECT pt.partner_name, ', @sql, ' from partners pt
left join sales s
  on pt.part_id = s.partner_id
left join products pd
  on s.product_id = pd.prod_id
group by pt.partner_name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann man MySQL-Zeilen dynamisch in Spalten umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage