У меня есть первый запрос, который выполняется по мере необходимости. Этот запрос агрегирует уровни активности для пользователей в соответствующие BusinessIds по неделям.Нужна помощь с включением второго запроса в первый запрос
Для целей отчетности мне нужно было создать новый столбец, который фиксирует количество пользовательских идентификаторов, которые имеют уровни активности выше 0 для каждой сгруппированной недели и BusinessId. Второй запрос дает мне правильные значения сам по себе (хотя он может иметь больше точек данных, чем необходимо для слияния), но мне сложно слить это в мой первый запрос.
Это, скорее всего, довольно прямое усилие, но я не смог понять это из образцов в других вопросах. Любая помощь приветствуется.
/* First Query */
SET DATEFIRST 2;
SELECT
SUM(
fua.[RisksAffected]
+fua.[IssuesAffected]
+fua.[ChangesAffected]) AS RIC
,SUM(
fua.[ProjectsCreated]
+fua.[ProjectsAffected]) AS Projects
,CASE
WHEN SUM(fua.[ProjectsCreated]) >0
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
END AS ProjectCreated
,SUM(fua.[TimesheetsCreated]) AS Timesheets
,SUM(fua.[ReportsAffected]) AS Reports
,SUM(fua.[FilesAffected]) AS Files
,ud.[BusinessId]
,COUNT (DISTINCT fua.UserId) AS [UserCount]
,DateAdd(day, -1 * datepart(dw,fua.[QueryDate]),fua.[QueryDate]) AS [ActivityDate]
FROM [client_projectmanager].[whs].[FactUserActivity] fua
Left Join [client_projectmanager].[whs].[DimUserDataV2] ud
ON
fua.[UserId] = ud.[UserId]
GROUP BY
DateAdd(day, -1 * datepart(dw,fua.[QueryDate]),fua.[QueryDate]),ud.[BusinessId]
/* Second Query */
SET DATEFIRST 2;
SELECT
count (distinct sela.UserId)
,sela.BusinessId
,DateAdd(day, -1 * datepart(dw,sela.[Date]),sela.Date)
FROM
(SELECT
fua.UserId
,ud.BusinessId
,DateAdd(day, -1 * datepart(dw,fua.[QueryDate]),fua.[QueryDate]) AS [Date]
,SUM(
fua.[RisksAffected]
+fua.[IssuesAffected]
+fua.[ChangesAffected]
+fua.[ProjectsCreated]
+[ProjectsAffected]) AS Acttotal
FROM [client_projectmanager].[whs].[FactUserActivity] fua
Left Join [client_projectmanager].[whs].[DimUserDataV2] ud
ON
fua.[UserId] = ud.[UserId]
GROUP BY
DateAdd(day, -1 * datepart(dw,fua.[QueryDate]),fua.[QueryDate])
,fua.[UserId]
,ud.BusinessId
HAVING
SUM(fua.[RisksAffected]
+fua.[IssuesAffected]
+fua.[ChangesAffected]
+fua.[ProjectsCreated]
+fua.[ProjectsAffected])
>0) sela
GROUP BY
DateAdd(day, -1 * datepart(dw,sela.[Date]),sela.Date)
,sela.BusinessId
ORDER BY DateAdd(day, -1 * datepart(dw,sela.[Date]),sela.Date)
Я обновил свой код, предложил, и, похоже, он работает. Спасибо вам за это! Я открыт для других методов, если они более эффективны. SQL не является моим основным фокусом, поэтому я немного учусь об этом. Поскольку у меня есть несколько нулевых значений, я использовал CASE для возврата 0 для нулевых значений. – Terry