У меня есть хранимая процедура, в которой я пытаюсь объединить два разных оператора SELECT
, используя UNION ALL
, но после выполнения запроса возвращаются только элементы из первого SELECT
.Сохраненная процедура Union All issue
Я хотел получить все элементы как из первых, так и из вторых операторов выбора.
Вот что у меня есть:
CREATE PROCEDURE [dbo].[Report_AllActivitiesOfficesAll]
@BeginDate datetime,
@EndDate datetime
AS
SET @BeginDate = .dbo.DateOnly(@BeginDate)
SET @EndDate = .dbo.DateOnly(@EndDate)
BEGIN
SET NOCOUNT ON;
SELECT
O.OfficeId,
O.OfficeName AS Name,
AT.Description AS Activity,
SUM(A.Duration) AS [Minutes],
CAST(SUM(A.Duration) AS FLOAT)/60 AS [Hours],
COUNT(A.ActivityId) AS Activities,
COUNT(DISTINCT A.CaseId) AS Cases,
MIN(CAST(A.Duration AS FLOAT)/60) AS [Min Time],
MAX(CAST(A.Duration AS FLOAT)/60) AS [Max Time],
SUM(CAST(A.Duration AS FLOAT)/60)/COUNT(A.ActivityId) AS [Avg Time],
SUM(CAST(A.Duration AS FLOAT)/60) AS [TotalHours]
FROM Activity A
INNER JOIN ActivityType AT ON A.ActivityTypeId = AT.ActivityTypeId
INNER JOIN ActivityEntry AE ON A.ActivityEntryId = AE.ActivityEntryId
INNER JOIN [Case] C ON A.CaseId = C.CaseId
INNER JOIN [Office] O ON AE.OfficeId = O.OfficeId
INNER JOIN [User] U ON C.CreatedByUserId = U.UserId
WHERE .dbo.DateOnly(AE.ActivityDate) BETWEEN @BeginDate AND @EndDate
GROUP BY
O.OfficeId,
O.OfficeName,
AT.Description
UNION ALL
SELECT
O.OfficeId,
O.OfficeId AS NonCaseOfficeId,
O.OfficeName AS OfficeName,
NCAT.Description AS NonCaseActivityType,
SUM(NCA.Duration) AS [Minutes],
CAST(SUM(NCA.Duration) AS FLOAT)/60 AS [Hours],
COUNT(NCA.NonCaseActivityId) AS Activities,
MIN(CAST(NCA.Duration AS FLOAT)/60) AS [Min Time],
MAX(CAST(NCA.Duration AS FLOAT)/60) AS [Max Time],
SUM(CAST(NCA.Duration AS FLOAT)/60)/COUNT(NCA.NonCaseActivityId) AS [Avg Time],
SUM(CAST(NCA.Duration AS FLOAT)/60) AS [TotalHours]
FROM NonCaseActivity NCA
INNER JOIN NonCaseActivityType NCAT ON NCA.NonCaseActivityTypeId = NCAT.NonCaseActivityTypeId
INNER JOIN [Office] O ON NCA.OfficeId = O.OfficeId
INNER JOIN [User] U ON NCA.UserId = U.UserId
WHERE .dbo.DateOnly(NCA.ActivityDate) BETWEEN @BeginDate AND @EndDate
GROUP BY
O.OfficeId,
O.OfficeName,
NCAT.Description
END
Опубликовать всю хранимую процедуру, должно быть что-то не так. – Magnus
@Magnus Я только что добавил полный код с последними изменениями. – Masriyah
У вас по 11 столбцов каждый, но каждый тип данных столбца должен быть одинаковым. У вас есть несколько столбцов, которые не * появляются * одинакового типа данных. –