sql >> Database >  >> RDS >> Mysql

MySQL-draaitabelquery met dynamische kolommen die de sleutelwaarde afkappen

Er zijn verschillende problemen met uw code - door de zwaartekracht te verminderen:

  • je moet from z_tmp_admin_system_settings , niet from name
  • de kolom om op te groeperen heet category , niet subdomain
  • aangezien het principe van de query is om aggregatie te gebruiken, hebt u aggregatiefuncties nodig voor de gegenereerde kolommen, zoals MAX(); oude versies van MySQL tolereren het niet gebruiken van een aggregatiefunctie op niet-geaggregeerde kolommen, maar dat is niet iets om aan te wennen
  • het is een goede gewoonte om de naam van de kolommen te omringen met backticks, voor het geval een van de namen botst met een gereserveerd woord (dit is niet het geval in uw voorbeeldgegevens, maar het is waarschijnlijk niet volledig)
  • DISTINCT is waarschijnlijk niet nodig, tenzij je name . hebt gedupliceerd s per categorie (in dit geval, voel je vrij om het weer toe te voegen aan de onderstaande code)
  • Kanttekening:IFNULL(..., NULL) is een no-op

Code:

SET SESSION group_concat_max_len = 100000;
SET @sql = '';

SELECT GROUP_CONCAT(
    CONCAT('MAX(IF(z_tmp_admin_system_settings.name = ''', name, ''', value, NULL)) AS `', name, '`')
)
INTO @sql
FROM z_tmp_admin_system_settings;
SET @sql = CONCAT(
    'SELECT category, ', 
    @sql, 
    ' FROM z_tmp_admin_system_settings GROUP BY category'
);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Demo op DB Fiddle :

| category | 2fa | abc_processing_date | activate_new_approve_person | activate_new_schdule | additional_footer_for_person |
| -------- | --- | ------------------- | --------------------------- | -------------------- | ---------------------------- |
| acme     | 0   | today               | 1                           | 1                    |                              |


  1. Hoe kan ik de opdrachtreeks zien bij het gebruik van MySqlCommand-parameters?

  2. Queryresultaten exporteren naar .csv of door tabs gescheiden bestand in SQL Server Management Studio (SSMS) - SQL Server / TSQL-zelfstudie, deel 23

  3. Hoe bewaar ik MySQL-configuratievariabelen in CloudSQL?

  4. SQL Server Express versus express localdb