sql >> Database teknologi >  >> RDS >> Mysql

Vis størrelseskolonne som række for hvert farveprodukt i relateret tabel?

Der er ingen PIVOT-kommando (MySQL pivottabeller (omdan rækker til kolonner) ) i MySQL, så din forespørgsel vil være statisk for størrelse. Derfor er det bedre at udsætte dette i ansøgningen.

Tænkte, at hvis du kun har et begrænset og lille domæne til størrelseskolonne, så kan du bruge følgende forespørgsel, jeg postede nedenfor:

mysql> SELECT 
    ->      c.color as color,
    ->      SUM(IF(s.size = 32, o.amount, 0)) as '32',
    ->      SUM(IF(s.size = 34, o.amount, 0)) as '34',
    ->      SUM(IF(s.size = 36, o.amount, 0)) as '36',
    ->      SUM(IF(s.size = 38, o.amount, 0)) as '38'
    ->  FROM `colors` c
    ->  INNER JOIN `order` o
    ->  INNER JOIN `sizes` s
    ->      WHERE c.`id` = o.`color` and s.`id` = o.`size`
    -> GROUP BY color 
    -> ;
+-------+------+------+------+------+
| color | 32   | 34   | 36   | 38   |
+-------+------+------+------+------+
| blue  |    3 |    4 |    2 |    0 |
| red   |    1 |    0 |    0 |    0 |
+-------+------+------+------+------+
2 rows in set (0.04 sec)

Som du kan se i IF-forhold, bruger jeg værdi af størrelse, det er det, jeg mener, spørgsmålet er statisk. Jeg antager, at alle mulige størrelser kan være enten 32, 34, 36, 38.

Working demo @SQL Fiddle

Rediger:Som jeg siger fra start Hvis størrelsesværdier er ukendte, eller domænet er stort, så er det bedre, at du udsætter pivotarbejde i dit serverscript (f.eks. PHP), men du kan stadig bruge følgende forespørgsel til at behandle i scriptet:

SELECT 
     c.color as color,
     s.size,
     o.amount  --Edit: added 
 FROM `colors` c
 INNER JOIN `order` o
 INNER JOIN `sizes` s
     WHERE c.`id` = o.`color` and s.`id` = o.`size`

Se, hvordan det virker @SQL-violin .




  1. Slet join fra to tabeller

  2. Meget langsom ydeevne i Django med ekstern Oracle-server

  3. hvordan man opretter forbindelse til en oracle-database fra unix

  4. Sammenkæd rækkeværdier T-SQL