2012-05-18 2 views
0

У меня есть таблица, полная данных о посещаемости для студентов, мы переносимся в другую информационную систему для учеников и то, как они хотят, чтобы плоские файлы были одной строкой для каждого ученика за каждый день со всеми 7 периодами. В настоящее время наши данные хранятся как одна запись в день за период (см. Прилагаемую схему). Каким будет лучший способ отформатировать эти данные в соответствии с тем, что я перечислил выше. Я также прикрепляю скриншот того, как они этого хотят (каждая строка - столбец).Перерыв данных из одной колонки в несколько столбцов

Добавлен скриншот данных.

Our current Database Schema

What it needs to be

enter image description here

+0

Я полностью смущен вашим вопросом. Вы сказали, что им нужно «все 7 периодов». Я не вижу периодов в вашей схеме ... Я вижу absent_period. Я также вижу, что есть ход, чем 7 Abs Code Period. Я вижу Abs Code Period 1 через Abs Code Period 14. Было бы очень полезно, если бы вы приводили пример, используя реальные данные, а не только схему и макет. –

+0

Я добавил скриншот данных. Есть более 7 периодов для учебы в других школах, и мы сожалеем о путанице. – Mysteri0n

+0

Какая версия SQL? –

ответ

0

ИТАК стержень был не то, что мне было нужно. Я закончил разговор с коллегой о моей проблеме, и он сказал мне использовать подзапросы. Так вот как я это решил!

select distinct student_id,school_year,school_number,absent_date, 
(select absent_code from attend_student_detail a2 where a2.student_id=a.student_id and a2.absent_date=a.absent_date and a2.absent_period='H') as daily_code, 
(select absent_code from attend_student_detail a2 where a2.student_id=a.student_id and a2.absent_date=a.absent_date and a2.absent_period='1') as per_1, 
(select absent_code from attend_student_detail a2 where a2.student_id=a.student_id and a2.absent_date=a.absent_date and a2.absent_period='2') as per_2, 
(select absent_code from attend_student_detail a2 where a2.student_id=a.student_id and a2.absent_date=a.absent_date and a2.absent_period='3') as per_3, 
(select absent_code from attend_student_detail a2 where a2.student_id=a.student_id and a2.absent_date=a.absent_date and a2.absent_period='4') as per_4, 
(select absent_code from attend_student_detail a2 where a2.student_id=a.student_id and a2.absent_date=a.absent_date and a2.absent_period='5') as per_5, 
(select absent_code from attend_student_detail a2 where a2.student_id=a.student_id and a2.absent_date=a.absent_date and a2.absent_period='6') as per_6, 
(select absent_code from attend_student_detail a2 where a2.student_id=a.student_id and a2.absent_date=a.absent_date and a2.absent_period='7') as per_7 

FROM attend_student_detail a 

Order By Absent_Date, Student_ID 
1

взглянуть на PIVOT и UNPIVOT.

Here является примером

+0

Выглядит интересно, собираюсь изучить эту фигуру, как применить ее к моей ситуации. – Mysteri0n

+0

От чтения этой статьи мне кажется, что мне нужна комбинация из двух? Потому что мне не нужно собирать посещаемость. Я думаю, что хорошим примером того, что мне нужно, является то, что я принимаю сегодняшнюю посещаемость, и у меня есть студент, который отсутствует. Я бы увидел только одну строку с 7 разными столбцами периода, и каждый из них имел бы отсутствующий код в этих столбцах. Я думаю, что мне нужно как-то использовать аргумент case, но мне нужно только на строку даты на каждого ученика в день? Мысли? – Mysteri0n

Смежные вопросы