Эта проблема посылает меня с ума, хотя по общему признанию я давно не писал SQL.
У меня есть 2 таблицы:
CREATE TABLE [Entities].[Events](
[EventID] [int] IDENTITY(1,1) NOT NULL,
[EventVenueID] [int] NULL,
[EntityID] [int] NOT NULL,
[OrganisationID] [int] NULL,
[Title] [nvarchar](300) NOT NULL,
[DateStart] [datetime] NOT NULL,
[DateFinish] [datetime] NOT NULL,
[Notes] [nvarchar](max) NULL,
[MinimumProviders] [int] NOT NULL,
[MinimumAttendees] [int] NOT NULL,
[ShowCalendar] [bit] NOT NULL,
[CreationDate] [datetime] NOT NULL,
[IsEnabled] [bit] NOT NULL)
CREATE TABLE [Entities].[EventParticipants](
[ParticipantID] [int] IDENTITY(1,1) NOT NULL,
[EventID] [int] NOT NULL,
[PersonID] [int] NOT NULL,
[ParticipantType] [int] NOT NULL,
[ParticipantStatus] [int] NOT NULL,
[AttendanceStatus] [int] NULL)
И запрос:
SELECT
e.EventID,
ev.VenueName,
e.EntityID,
o.Name AS 'Organisation',
e.Title,
e.DateStart,
e.DateFinish,
e.Notes,
e.MinimumProviders,
e.MinimumAttendees,
e.CreationDate,
COUNT(epp.ParticipantID) AS 'ProvidersConfirmed',
COUNT(epa.ParticipantID) AS 'AttendeesConfirmed',
e.IsEnabled
FROM
Entities.Events e
LEFT OUTER JOIN
Entities.EventVenues ev
ON
e.EventVenueID = ev.EventVenueID
LEFT OUTER JOIN
Entities.Organisations o
ON
e.OrganisationID = o.OrganisationID
LEFT OUTER JOIN
Entities.EventParticipants epp
ON
e.EventID = epp.EventID AND epp.ParticipantType = 1 AND epp.ParticipantStatus = 3
LEFT OUTER JOIN
Entities.EventParticipants epa
ON
e.EventID = epa.EventID AND epa.ParticipantType = 2 AND epa.ParticipantStatus = 3
GROUP BY
e.EventID,
ev.VenueName,
e.EntityID,
o.Name,
e.Title,
e.DateStart,
e.DateFinish,
e.Notes,
e.MinimumProviders,
e.MinimumAttendees,
e.CreationDate,
e.IsEnabled
Счетчик дает странные результаты, например, в таблице EventParticipants у меня есть следующие данные:
Тип участника = 1 (3 записи)
Тип участника = 2 (1 запись)
Статус участника = 3 (4 записи)
Количество запросов должно возвращаться:
ProvidersConfirmed = 3
AtcondeesConfirmed = 1
Однако, он возвращается
ProvidersConfirmed = 3
AtcondeesConfirmed = 3
Может кто-нибудь помочь?