2016-06-22 9 views
0

Ich habe eine einfache Datenbank (mit MySql) mit der ich einen Bericht erstellen muss. Ich habe eine Tabelle, die schedule_plan, die von Benutzern gesendet werden.Machen Sie Zeile zu Spalte, um Bericht zu erstellen

this my column in my table schedule_plan

und meine Tabelle userinfo dem Namen, Alter dll

Also muss ich einen Bericht, der die Tage als Spalten sowie die Namen von einem userinfo Tabelle anzeigt.

Report 
+------+--------+--------+--------+-------+ 
| Name | 1 | 2 | 3 | until day 30/31 | 
+------+--------+--------+--------+-------+ 
| Bob |  ON |  ON | ON | ... | 
| Joe | OFF |  ON | OFF | ... | 
| Jim |  ON |  ON | ON | ... | 

wenn absence_code in schedule_plan null wird dann auf, wenn null OFF nicht

+0

Was haben Sie versuchen? ........ Siehe diese http://stackoverflow.com/questions/ 14834290/mysql-query-to-column-rows-to-columns und update query auch was du versucht hast ... –

+0

ich denke, funktioniert nicht für mich, weil meine Abfrage muss MAX (IF (abwesenheitscode ist null, 'ON', 'Off')) als Tag 1 dass MAX func ich nutzlos für mich halte. –

Antwort

0
create table attendance 
(user_id int,attendance_code varchar(1),dte date) 
*/ 
truncate table attendance; 
insert into attendance values 
(1,'a','2016-01-01'), 
(1,null,'2016-01-02'), 
(1,'a','2016-01-03'), 
(1,'a','2016-01-04'), 
(1,'a','2016-01-05'), 
(2,'a','2016-01-01'), 
(2,'a','2016-01-02'), 
(2,null,'2016-01-03'), 
(2,null,'2016-01-04'), 
(2,'a','2016-01-05') 
; 
select a.user_id, 
max(case when day(a.dte) = 1 then case when a.attendance_code is not null then 'On' else 'Off' end end) as day1, 
max(case when day(a.dte) = 2 then case when a.attendance_code is not null then 'On' else 'Off' end end) as day2, 
max(case when day(a.dte) = 3 then case when a.attendance_code is not null then 'On' else 'Off' end end) as day3, 
max(case when day(a.dte) = 4 then case when a.attendance_code is not null then 'On' else 'Off' end end) as day4, 
max(case when day(a.dte) = 5 then case when a.attendance_code is not null then 'On' else 'Off' end end) as day5 
from attendance a 
group by a.user_id; 
+0

so muss ich schreiben Tag (a.dte) bis 31, wie wäre es, wenn nur 28 oder 30 ich meine unknown Zahl Tag –

+0

oder 29 oder Intra-Monat. Wenn unangemessene wie 29-31 in Monat 2 für Sie inakzeptabel sind, müssen Sie eine SQL-Anweisung erstellen und sie mit dynamischem SQL basierend auf der von mir bereitgestellten Lösung ausführen. –