Сбор данных из двух разных таблиц, Sql - PullRequest
0 голосов
/ 28 июня 2018

У меня есть две отдельные таблицы, которые представляют посещаемость студентов в течение двух недель, соответственно. Я хочу создать две колонки, которые разбивают посещаемость по неделям для каждого из студентов. Если ученик присутствовал несколько раз в неделю, следует добавить количество присутствующих. Кроме того, если студент присутствовал в течение одной недели, а не в следующую, он получал бы 1 за текущий месяц (при условии, что он присутствовал только один раз) и 0 за одну отсутствующую. Я пытался несколько вариантов count () и объединений, но безрезультатно. Любая помощь будет принята с благодарностью. Ниже приводится усеченная скрипка:

http://www.sqlfiddle.com/#!9/36a6e0

Вот пример того, чего я пытаюсь достичь:

Name | CurrWeek | LastWeek

Paula | 0 | 2

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Попробуйте это

Для 2 таблиц

Select name, max(current_week) current_week, max(last_week) as last_week
    From (
    Select name, count(1) as current_week, 0 as last_week from currentWeek group by name
    union all
    Select name, 0 as current_week, count(1) as last_week from lastWeek group by name
    ) x
    group by name

для 3 таблиц

Select name, max(current_week) current_week, max(last_week) as last_week, max(third_week) as third_week
    From (
    Select name, count(1) as current_week, 0 as last_week, 0 as thrid_week from currentWeek group by name
    union all
    Select name, 0 as current_week, count(1) as last_week, 0 as thrid_week from lastWeek group by name
    union all
    Select name, 0 as current_week, 0 as last_week, count(1) as thrid_week from thirdWeek group by name
    ) x
    group by name
0 голосов
/ 28 июня 2018

Вам нужно объединиться и сосчитать, а для объединения обоих наборов результатов необходимо объединение

select T1.name,T1.currentwk,T2.lasttwk from 
    (
    select name,count(id) as currentwk from currentWeek

    group by name
    ) as T1

     left  join 
     (

     select name,count(id) as lasttwk from lastWeek

    group by name
       ) as T2
       on T1.name=T2.name

     union 
     select T2.name,T1.currentwk,T2.lasttwk from 
    (
    select name,count(id) as currentwk from currentWeek

    group by name
    ) as T1

     right  join 
     (

     select name,count(id) as lasttwk from lastWeek

    group by name
       ) as T2
       on T1.name=T2.name

http://www.sqlfiddle.com/#!9/36a6e0/25

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