Как использовать Case после использования Inner Join ON - PullRequest
0 голосов
/ 08 октября 2019

Как использовать выражение регистра после последнего включения внутреннего соединения?

Create View v_classroom
AS
SELECT A.roomcode,A.roomname,A.deviceID,
B.occupancy,B.Temperature,B.localtime,
C.classend,C.classstart,C.subject
From devicemessage b
inner join device A ON b.deviceID =A.deviceId
inner join classtimetable C on A.roomcode= c.roomid
//i want to use case statement here 

1 Ответ

1 голос
/ 08 октября 2019

Это зависит от того, что вы хотите, чтобы оператор case делал.

Например, допустим, вы хотите вернуть значение в зависимости от занятости. В этом случае ваш оператор case должен быть частью предложения select.

Create View v_classroom
AS
SELECT 
     A.roomcode
    ,A.roomname
    ,A.deviceID
    ,B.occupancy
    ,case     -- This returns a new column 'Occupancy_result' with the case statement result
        when occupancy >= 5 then 'ROOM FULL'
        when occupancy = 0 then 'ROOM EMPTY'
        else 'ROOM PARTIALLY FULL'
        end as Occupancy_Result 
    ,B.Temperature
    ,B.localtime
    ,C.classend
    ,C.classstart
    ,C.subject
From devicemessage b
    inner join device A 
        ON b.deviceID = A.deviceId
    inner join classtimetable C 
        on A.roomcode = c.roomid

Если вы хотите фильтровать ваших результатов на основе их значений, лучшим выбором будетбыть оператором where после предложений join.

Create View v_classroom
AS
SELECT 
     A.roomcode
    ,A.roomname
    ,A.deviceID
    ,B.occupancy
    ,B.Temperature
    ,B.localtime
    ,C.classend
    ,C.classstart
    ,C.subject
From devicemessage b
    inner join device A 
        ON b.deviceID = A.deviceId
    inner join classtimetable C 
        on A.roomcode = c.
where occupancy <= 5    -- This filters out any results that do not meet the condition

Если ни одно из этих решений само по себе не соответствует вашим потребностям, комбинация из двух может быть ответом. Вы можете использовать оператор case в предложении select, а затем отфильтровать результирующие значения в операторе where.

...