Сделайте два разных запроса в одном удаленном представлении - PullRequest
0 голосов
/ 08 июля 2020

Мне нужен один запрос из этих двух запросов, удаляющий ВИД. Я поделился обоими запросами. В результате запроса дается результат свободного времени официантов между каждым клиентом каждый день. Ниже приводится запрос

-----Query_1
Create View t as 

    SELECT DISTINCT C.Branch_ID+''+ CAST(C.Wait_No AS NVARCHAR(20)) [WaitNumber],
            W.LASTNAME + ', ' + W.FIRSTNAME + ' ' + W.TITLE [Waiter], 
            Customer_In_Time, 
            Customer_Out_Time,
            Date,
            Table_No

    FROM Customers  C
    LEFT JOIN Waitor_Resources WR ON C.Wait_No = WR.Wait_No 
    AND C.Branch_ID = wR.Branch_ID
    AND C.Floor_ID = WR.Floor_ID
    AND C.Resource_ID = 0
    AND C.Order_No = 1
    AND C.Active  =1

    LEFT JOIN Waiters  W ON W.User_ID = WR.User_ID
    AND W.Active =1 
----Query_2

Declare @start date, @end date
set @start='01/01/2020'
set @end='03/03/2020'

select t.WaitNumber,Waiter,t.Customer_In_Time,Customer_Out_Time,Table_no,
       coalesce(sum(datediff(minute, prev_cot, Customer_in_time)), 0) as free_minutes
from (select t.*,
             tprev.Customer_out_time as prev_cot
      from t outer apply
           (select top (1) t2.*
            from t t2
            where t2.Waiter = t.Waiter and t2.date = t.date and
                  t2.Customer_in_time < t.Customer_in_time
                  
            order by t.Waiter, t2.Customer_in_time 
           ) tprev
     ) t
     where t.date between @start and @end
     and Waiter is not Null
     
    
group by Waiter, Customer_In_Time,Customer_Out_Time, Table_no,t.WaitNumber
 order by t.Waiter,t.Customer_In_time 

1 Ответ

0 голосов
/ 08 июля 2020

Используйте CTE (общее табличное выражение) вместо представления. Например:

Declare @start date, @end date
set @start='01/01/2020'
set @end='03/03/2020'

Тогда:

with
t as (
    SELECT DISTINCT C.Branch_ID+''+ CAST(C.Wait_No AS NVARCHAR(20)) [WaitNumber],
            W.LASTNAME + ', ' + W.FIRSTNAME + ' ' + W.TITLE [Waiter], 
            Customer_In_Time, 
            Customer_Out_Time,
            Date,
            Table_No
    FROM Customers  C
    LEFT JOIN Waitor_Resources WR ON C.Wait_No = WR.Wait_No 
    AND C.Branch_ID = wR.Branch_ID
    AND C.Floor_ID = WR.Floor_ID
    AND C.Resource_ID = 0
    AND C.Order_No = 1
    AND C.Active  =1
    LEFT JOIN Waiters  W ON W.User_ID = WR.User_ID
    AND W.Active =1
)
select t.WaitNumber,Waiter,t.Customer_In_Time,Customer_Out_Time,Table_no,
       coalesce(sum(datediff(minute, prev_cot, Customer_in_time)), 0) as free_minutes
from (select t.*,
             tprev.Customer_out_time as prev_cot
      from t outer apply
           (select top (1) t2.*
            from t t2
            where t2.Waiter = t.Waiter and t2.date = t.date and
                  t2.Customer_in_time < t.Customer_in_time
            order by t.Waiter, t2.Customer_in_time 
           ) tprev
     ) t
     where t.date between @start and @end
     and Waiter is not Null
group by Waiter, Customer_In_Time,Customer_Out_Time, Table_no,t.WaitNumber
 order by t.Waiter,t.Customer_In_time 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...