sql >> Databáze >  >> RDS >> Mysql

dynamické sloupce pomocí dotazu kontingenční tabulky

Pokud vím, nemůžete dynamicky přidávat sloupce do příkazu SELECT. To, co požadujete, je způsob prezentace dat a o to MySQL nestojí. Měli byste to řešit na frontendu.

Můžete však podvádět vytvářením dotazů v modelu a dynamickým přidáváním těchto nových sloupců dynamickým vkládáním dalších MAX(case... na řetězec dotazu. To však není hezké řešení.

Upravit:

Takže předpokládám, že mluvíte o ošklivém řešení. V zásadě byste měli dynamicky vytvořit řetězec dotazu (pseudokód):

$initialDay = 02/28/2012;
$lastDay = 03/28/2012;
$dayNumber = 1;
$sql = 'Select cadet_record.fname,cadet_record.lname,cadet_record.mname, student_id';
while ($initialDay <= $lastDay) {
    $sql .= ', MAX(case WHEN week = $initialDay then present end) as day' . $dayNumber;
    $initialDay = $initialDay + 1 day;
    $dayNumber++;
}
$sql .= ' From attendance blah blah...';

Pak by váš dotaz pro data od 18. 2. 2012 do 18. 3. 2012 měl vypadat takto:

Select cadet_record.fname,cadet_record.lname,cadet_record.mname, student_id,
,MAX(case WHEN week = '02/18/2012' then present end) as day1
,MAX(case WHEN week = '02/19/2012' then present end) as day2
From attendance
LEFT JOIN cadet_record ON cadet_record.stud_no = attendance.student_id WHERE section = '$section' AND schoolyear = '$year' AND component = '$component' AND semester = '$semester'

GROUP BY student_id

Všimněte si, že jsem přidal dny místo týdnů, protože váš příklad ukázal rostoucí dny, ačkoli název sloupce byl týdny



  1. spuštění souboru .sql v příkazovém řádku

  2. Obnovení zálohy databáze SQL Server na nižší verzi

  3. Proč \G v SELECT * FROM název_tabulky\G?

  4. Instalace softwaru Oracle Database 12c v systému Windows