У меня есть следующее заявление SQL:

 SELECT
    Distinct UserId, A.TId, Branch ,Operation, FormId, A.ReportRefreshDate, UserType=Case When U.Designer=1 Then 'Designer' When U.Respondent=1 Then 'Respondent' END
FROM Activities A
INNER JOIN Users 
    ON LOWER(Users.UserPName) = LOWER(A.UserId)
INNER JOIN ActiviesUserTypes U
    ON Operation = U.ActionName
WHERE 
A.TId=4
AND
Users.Branch='LLA'
AND
(U.Designer=1 OR U.Respondent=1)
AND
A.ReportRefreshDate between DateAdd(DD,-200,GETDATE() ) and GETDATE()

Это возвращает следующие фиктивные / примерные данные:

UserId  TId Branch  Operation      FormId   ReportRefreshDate       UserType
jja     4   LLA     CreateResponse x21      2021-08-25 07:18:06.000 Respondent
asdf    4   LLA     ExportForm     f22      2021-08-25 07:18:06.000 Designer
38fa    4   LLA     ViewForm       2ay      2021-08-25 07:18:06.000 Designer
arb     4   LLA     CreateResponse x21      2021-08-29 07:18:06.000 Respondent
rtbs    4   LLA     CreateResponse f22      2021-08-29 07:18:06.000 Respondent
vfaa    4   LLA     ViewForm       2ay      2021-08-29 07:18:06.000 Designer

Это хорошее начало. Но в конечном итоге мне нужно получить итоговые данные по каждому типу пользователей за день. так что-то вроде этого:

ReportRefreshDate.       TotalDesigners.  TotalRespondents
2021-08-25 07:18:06.000  2                1
2021-08-29 07:18:06.000  1                2

Может ли кто-нибудь указать мне правильное направление? Благодаря!

0
dot 17 Сен 2021 в 16:08

2 ответа

Лучший ответ

Ты можешь сделать :

with cte as (
    <query here>
)
select ReportRefreshDate,
       sum(case when UserType = 'Designer' then 1 else 0 end) as TotalDesigner,
       sum(case when UserType = 'Respondent' then 1 else 0 end) as TotalRespondents
from cte c
group by ReportRefreshDate;
1
Yogesh Sharma 17 Сен 2021 в 13:11

Я использовал Pivot. Обновление: я удалил Distinct по вашему запросу после отзыва Charlieface.

  SELECT 'count' AS user_type,   
      [Respondent], [Designer] 
    FROM  
    ( 
       SELECT
     UserId, A.TId, Branch ,Operation, FormId, A.ReportRefreshDate, UserType=Case When U.Designer=1 Then 'Designer' When U.Respondent=1 Then 'Respondent' END
FROM Activities A
INNER JOIN Users 
    ON LOWER(Users.UserPName) = LOWER(A.UserId)
INNER JOIN ActiviesUserTypes U
    ON Operation = U.ActionName
WHERE 
A.TId=4
AND
Users.Branch='LLA'
AND
(U.Designer=1 OR U.Respondent=1)
AND
A.ReportRefreshDate between DateAdd(DD,-200,GETDATE() ) and GETDATE()
    
    ) AS SourceTable  
    PIVOT  
    (  
      COUNT(UserType)  
      FOR UserType IN ([Respondent], [Designer])  
    ) AS PivotTable;  
1
Ali Fidanli 17 Сен 2021 в 13:35