TSQL ОТЛИЧНЫЙ СЧЕТ ЗАПИСИ - PullRequest
1 голос
/ 28 сентября 2011

Я использую 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

1 Ответ

1 голос
/ 28 сентября 2011

Мне кажется, я понял, что ты пытаешься сделать.Если нет, то я извиняюсь.что-то вроде этого должно помочь вам:

Select consumer, [Program Enrollment Date], event_name, countPerConsumer.[Number of Events]
From #INITIATIONS i
Join (Select Consumer, count(distinct event_name) as [Number of Events] 
        group by Consumer)countPerConsumer 
    on countPerConsumber.consumer = i.consumer

идея заключается в том, что вы присоединяетесь к таблице, построенной на лету для подсчета различных событий для каждого потребителя.Вы должны быть в состоянии сохранить часть, где вы строите #INITIATIONS, и просто заменить последний запрос на приведенный выше.надеюсь, это поможет.

...