sql >> Databasteknik >  >> RDS >> Mysql

dynamiska kolumner med pivottabellsfråga

Så vitt jag vet kan du inte dynamiskt lägga till kolumner i en SELECT-sats. Det du efterfrågar är ett sätt att presentera data och det är inget MySQL bryr sig om. Du bör hantera det i fronten.

Du kan dock fuska genom att skapa dina frågor i din modell och dynamiskt lägga till dessa nya kolumner, genom att dynamiskt infoga fler MAX(case... till frågesträngen. Det är dock ingen bra lösning.

Redigera:

Så jag antar att du pratar om den fula lösningen. Tja, i princip bör du dynamiskt skapa din frågesträng (pseudokod):

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

Då bör din fråga se ut så här för datum från 2012-02-18 till 2012-03-18:

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

Lägg märke till att jag lade till dagar istället för veckor eftersom ditt exempel visade ökande dagar, även om kolumnnamnet var veckor



  1. Hur hanterar man stora mängder data med hjälp av filström eftersom endast lokala sökvägar stöds för datalagring?

  2. Hur skickar jag sqlparameter till IN()?

  3. Hur man gjuter typ bytea till dubbel precision

  4. Fråga med två kolumnvärden för att skapa intervall