Обновить столбец активности описаниями - PullRequest
0 голосов
/ 07 мая 2019

У меня есть две таблицы:

Таблица СТУДЕНЧЕСКОЙ ДЕЯТЕЛЬНОСТИ:

ID  NAME    TIME_FROM   TIME_TO    ACTIVITY
-------------------------------------------
1   ABC      9:00        10:00     WALK
2   ABC      10:00       12:00     PLAY

GAMELOG table:

ID ACTIVITY_ID   STUDENT_NAME  CRICKET (HR)   FOOT BALL (HR)
------------------------------------------------------------------
 1    2            ABC              1               1

Таблица «Студенческая активность» содержит основную активность студента, а таблица «Геймлог» содержит подробности о деятельности. Например: в упражнении «ИГРА» указаны КРИКЕТ и ШАРИК ДЛЯ НОГ в качестве подробного описания занятия.

Мне нужен запрос для получения сведений об активности, как показано в ожидаемом результате:

ID  NAME    ACTIVITY    DURATION HOURS  
----------------------------------------
1   ABC     WALKING          1  
2   ABC     CRICKET          1  
2   ABC     FOOTBALL         1

Если нет подробного действия для основного действия, как показано выше для WALKING, запрос должен вернуть основное действие

Предположим, игровой журнал генерируется на основе зарегистрированного времени. Студент шел в течение часа и играл в течение 2 часов. Детали игры детально записываются как крикет 1 час и мяч для ног 1 час

Порядок игры должен быть 1. КРИКЕТ И 2. ФУТБОЛЬНЫЙ ШАР

Проще говоря, всякий раз, когда есть значение столбца PLAY, выход должен отображать детали игры из таблицы GameLog с CRICKET и FOOT BALL TIME.

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Попробуйте сначала повернуть игровой журнал как CTE или временную таблицу на основе вашего выбора.

with game_cte as
Select 
    id
    ,activity_id
    ,Student_Name
    ,'Cricket' as Activity
    ,cricket_hr as duration
    ,'Play' as action
from
    gamelog
where
    cricket_hr > 0

UNION ALL

Select 
    id
    ,activity_id
    ,Student_Name
    ,'Football' as Activity
    ,football_hr as duration
    ,'Play' as action
from
    gamelog
where
    football_hr > 0

Затем попробуйте этот союз

SELECT 
    G.activity_id
    ,G.Name
    ,G.Activity
    ,G.duration
FROM 
    Student_Activity SA 
    JOIN game_cte G ON SA.Name = G.Student_Name and SA.activity = G.action

UNION ALL

SELECT 
    S.ID
    ,S.Name
    ,CASE 
        WHEN S.Activity = 'WALK' THEN 'Walking'
     END CASE AS Activity
    ,(time_to - time_from) as duration
FROM 
    Student_Activity SA 
    JOIN GameLog G ON SA.Name = G.Student_Name
WHERE
    sa.activity = 'Walk'

Попробуйте, поможет ли это ..

0 голосов
/ 07 мая 2019

Я пытался без создания таблиц .. надеюсь, это поможет.

SELECT 
    S.ID
    ,S.Name
    ,CASE 
        WHEN S.Activity = 'WALK' THEN 'Walking'
        WHEN A.Cricket = 1 AND S.Activity = 'Play' THEN 'Cricket'
        WHEN A.Football = 1 AND S.Activity = 'Play' THEN 'Football'
    END CASE AS Activity
FROM 
    Student_Activity SA 
    JOIN GameLog G ON SA.Name = G.Student_Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...