sql >> Database >  >> RDS >> Mysql

dynamische kolommen met draaitabelquery

Voor zover ik weet, kunt u geen kolommen dynamisch toevoegen aan een SELECT-instructie. Waar u om vraagt, is een manier om gegevens te presenteren en dat is niet iets waar MySQL om geeft. Dat zou je aan de voorkant moeten regelen.

U kunt echter vals spelen door uw zoekopdrachten in uw model te maken en die nieuwe kolommen dynamisch toe te voegen, door dynamisch meer MAX(case... in te voegen) naar de queryreeks. Dat is echter geen mooie oplossing.

Bewerken:

Dus ik denk dat je het over de lelijke oplossing hebt. Welnu, in principe zou u uw queryreeks (pseudocode) dynamisch moeten maken:

$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...';

Dan zou uw vraag er als volgt uit moeten zien voor de data van 18-02-2012 tot 18-03-2012:

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'

GROEP OP student_id

Merk op dat ik dagen heb toegevoegd in plaats van weken omdat je voorbeeld toenemende dagen liet zien, hoewel de kolomnaam weken was



  1. Orde handhaven in MySQL IN-query

  2. SQL - Hoe vind je het hoogste getal in een kolom?

  3. Bereikbeperking numerieke MySQL-kolom:hoe?

  4. De datum ophalen uit een Datetime-kolom in MySQL