sql >> Database >  >> RDS >> Mysql

MySQL draait rij naar dynamisch aantal kolommen

Helaas heeft MySQL geen PIVOT functie die eigenlijk is wat u probeert te doen. U moet dus een aggregatiefunctie gebruiken met een CASE verklaring:

select pt.partner_name,
  count(case when pd.product_name = 'Product A' THEN 1 END) ProductA,
  count(case when pd.product_name = 'Product B' THEN 1 END) ProductB,
  count(case when pd.product_name = 'Product C' THEN 1 END) ProductC,
  count(case when pd.product_name = 'Product D' THEN 1 END) ProductD,
  count(case when pd.product_name = 'Product E' THEN 1 END) 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

Zie SQL-demo

Aangezien u de Producten niet kent, wilt u dit waarschijnlijk dynamisch uitvoeren. Dit kan worden gedaan met behulp van voorbereide verklaringen.

Met dynamische draaitabellen (transformeer rijen naar kolommen) ziet uw code er als volgt uit:

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;

Zie SQL-demo

Het is waarschijnlijk vermeldenswaard dat GROUP_CONCAT is standaard beperkt tot 1024 bytes. U kunt dit omzeilen door het hoger in te stellen voor de duur van uw procedure, dwz. SET @@group_concat_max_len = 32000;




  1. Django ConnectionAbortedError:[WinError 10053] Een tot stand gebrachte verbinding is afgebroken door de software op uw hostcomputer

  2. Oplossen Index voor tabelgebruiker is beschadigd; probeer het te repareren

  3. Wat is de primaire sleutelbeperking in de SQL Server-database - SQL Server / T-SQL-zelfstudie, deel 54

  4. PostgreSql INSERT FROM SELECT RETURNING ID