sql >> Database >  >> RDS >> Mysql

Groottekolom weergeven als rij voor elk kleurproduct in gerelateerde tabel?

Er is geen PIVOT-opdracht (MySQL draaitabellen (transformeer rijen naar kolommen) ) in MySQL, dus uw zoekopdracht zal statisch zijn voor grootte. Daarom is het beter om dit in de aanvraag uit te stellen.

Dacht dat als je slechts een eindig en klein domein hebt voor de kolomgrootte, je de volgende query kunt gebruiken die ik hieronder heb gepost:

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)

Zoals je kunt zien in IF-voorwaarden, gebruik ik de waarde van de grootte, dat is wat ik bedoel, de vraag is statisch. Ik neem aan dat alle mogelijke maten 32, 34, 36, 38 kunnen zijn.

Werkende demo @SQL Fiddle

Bewerken:zoals ik al zei vanaf het begin. Als de groottewaarden onbekend zijn of het domein groot is, is het beter dat u het draaiwerk binnen uw serverscript (bijv. PHP) uitstelt, maar u kunt de volgende query gebruiken om in het script te verwerken:

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`

Kijk hoe het werkt @SQL fiddle .




  1. Definities overslaan of negeren in Mysqldump

  2. Kan geen verbinding maken met PostgreSQL op afstand op Amazon EC2-instantie met PgAdmin

  3. Mysql - Gegevens archiveren, welke oplossing te gebruiken?

  4. De uitvoer van Getdate wijzigen