Создать представление, которое показывает, сколько студент потратил - PullRequest
0 голосов
/ 25 ноября 2018

Мне нужно создать вид, подобный этому:

STUDENT JANUARY FEBRUARY MARCH ........ DECEMBER
miki     10.23   23.23    0               0
Goku     10        0       0               0

У меня есть таблица studentMovement(id_studentmovement,id_student,month,year,cost,date), которая представляет стоимость каждого сигла для студента в этом месяце и году.он содержит реальную стоимость, которую понесли некоторые студенты.

Другая таблица - Month(id_month), в которой указан весь месяц (January==1 February==2 etc).

Таблица Students(id_student,name)

Другаяпредставление Years(id_year), содержит год.

Я хочу получить год, для всех учащихся в таблице ученика (также для учащихся, у которых нет результатов) и для всего месяца (если в этом месяце есть выходные данные, значение равно 0)Хочу получить сумму всех расходов.Так что, на мой взгляд, это

CREATE
    ALGORITHM = UNDEFINED DEFINER = "***" @"%" SQL SECURITY DEFINER VIEW "schema"."v_student_table" AS select
        "s"."id_student" AS "id_student",
        "s"."name" AS "name",
        "m"."id_month" AS "id_month",
        coalesce(sum("sm"."amount"),0) AS "amount",
        coalesce(month("sm"."date"),"month"."id_month") AS "month",
        coalesce(year("sm"."date"),"year"."id_year") AS "anno"
    from
        ((("schema"."studentMovement" "sm"
    left join "schema"."students" "s" on "s"."id_student"="sm"."id_student")
    left join "schema"."month" "m" on "m"."id_month"="sm".id_month")
    inner join "schema"."years" "y" on "y"."id_year"="sm".id_year")

    group by
        coalesce(year("sm"."date"),"year"."id_year"),
         coalesce(month("sm"."date"),"month"."id_month"),
    "s"."id_student",
        "s"."name",
        "m"."id_month"

Проблема в том, что если в месяце нет стоимости за месяц, мне нужно указать значение, равное 0, но с помощью этого запроса он этого не делает.проблема заключается в том, что студенческое движение имеет реальные результаты.в приведенном выше примере у Гоку только одна стоимость в январе, но студенческого гоку нет в ФЕВРАЛЕ и т. д. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 25 ноября 2018

Вы, кажется, хотите что-то вроде этого:

select year(sm.date) as year, s.id_student, s.name,
       sum(amount) as year_amount,
       sum(case when month(sm.date) = 1 then amount else 0 end) as january,
       sum(case when month(sm.date) = 2 then amount else 0 end) as february,
       . . .
       sum(case when month(sm.date) = 12 then amount else 0 end) as december,
        "m"."id_month" AS "id_month",
        coalesce(sum("sm"."amount"),0) AS "amount",
from schema.students s join
     schema.studentMovement sm 
     on s.d_student = sm.id_student 
group by year(sm.date) as year, s.id_student, s.name;

. . . - логика для оставшихся месяцев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...