Я использую SSMS 2008 и пытаюсь получить различное количество Event_names из моей таблицы.Но вместо этого он возвращает count = 1, когда на самом деле есть 2 записи и другие недопустимые значения.То, что я хочу, - это общее количество / потребитель для их количества различных названий событий, частью которых они являются.Кроме того, некоторые из количества событий для одного и того же потребителя отличаются.Но я хочу одного определенного счетчика / потребителя.Вот часть данных, возвращенных моим неверным запросом:
потребитель Дата регистрации в программе event_name Event_Ct
B, Tiffany 2010-09-27 12:00:00.000 Comprehensive Clinical Assessment 1
B, Tiffany 2010-09-27 00:00:00.000 Telemedicine Comprehensive Clinical Assessment 1
B, Nickolas Tyan 2010-12-07 15:00:00.000 Comprehensive Clinical Assessment 1
B, Nickolas Tyan 2010-12-07 00:00:00.000 Telemedicine Comprehensive Clinical Assessment 1
B, Jack 2011-06-13 08:30:00.000 Comprehensive Clinical Assessment 1
B, Jack 2011-01-03 00:00:00.000 Medication Management 1
B, Victoria Lynn 2010-11-10 00:00:00.000 Telemedicine Comprehensive Clinical Assessment 3
B, Victoria Lynn 2010-12-28 00:00:00.000 Telemedicine Psychiatric Assessment 3
B, Victoria Lynn 2011-01-07 00:00:00.000 Telemedicine Psychiatric Progress Note 2
B, Victoria Lynn 2011-02-08 00:00:00.000 Telemedicine Psychiatric Progress Note 2
А вот T-SQL, который я использовал для вышеупомянутого:
SELECT consumer, [Program Enrollment Date], event_name, [Program Quarter]
INTO #INITIATIONS
FROM #consumer_initiations
WHERE consumer IN
(SELECT DISTINCT Consumer
FROM #consumer_initiations
GROUP BY Consumer
HAVING Count(DISTINCT event_name) > 1)
ORDER BY consumer, event_name
SELECT A.consumer, A.[Program Enrollment Date], A.event_name, count(A.event_name)
FROM #INITIATIONS A
JOIN #INITIATIONS B ON A.consumer = B.consumer AND A.event_name <> B.event_name AND A.[Program Enrollment Date] <> B.[Program Enrollment Date]
GROUP BY A.consumer, A.event_name, a.[Program Enrollment Date]
Я также пробовал этот запрос, который возвращал правильные значения для потребителей только с 2 записями, но для пользователей с> 2 записями он возвращал слишком большое число:
SELECT A.consumer, count(A.event_name)
FROM #INITIATIONS A
JOIN #INITIATIONS B ON A.consumer = B.consumer AND A.event_name <> B.event_name AND A.[Program Enrollment Date] <> B.[Program Enrollment Date]
GROUP BY A.consumer
Благодаря КрисуВот решение, которое сработало:
Select I.consumer, [Program Enrollment Date], event_name, countPerConsumer.[Number of Events]
From #INITIATIONS i
Join (Select Consumer, count(distinct event_name) as [Number of Events] From #INITIATIONS GROUP BY Consumer) countPerConsumer
on countPerConsumer.Consumer
= i.consumer