@BaJar

Как организовать поиск повторяющихся значений?

Нужно определить повторятся ли значение в других строках таблицы. Написал запрос, в котором ищет count(значение) в одной строке.

Не знаю имеет ли значение мой код, без структуры БД:
select count(DocumentNodeValue) as repeatitions, DocumentNodeValue, DocumentTemplateName, PatientName, d1.DocumentID, d2.DocumentID
from  
Patient 
join Course on PatientRef = PatientID
join Document d1 on CourseRef = CourseID
join Document d2 on d1.DocumentID = d2.DocumentID
join DocumentTemplate on d1.DocumentTemplateRef = DocumentTemplateID
join DocumentNode on DocumentRef = d1.DocumentID
group by DocumentNodeValue, DocumentTemplateName, PatientName, d1.DocumentID, d2.DocumentID
having count(DocumentNodeValue) > 1

Не могу понять логику построения нужного запроса, нужна помощь.
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 1
TheRonCronix
@TheRonCronix
Как вариант:

select distinct DocumentNodeValue, DocumentTemplateName, PatientName, d1.DocumentID, d2.DocumentID
from
(
select DocumentNodeValue, DocumentTemplateName, PatientName, d1.DocumentID, d2.DocumentID, count(*) over(partition by DocumentNodeValue) as repeatitions
from
Patient
join Course on PatientRef = PatientID
join Document d1 on CourseRef = CourseID
join Document d2 on d1.DocumentID = d2.DocumentID
join DocumentTemplate on d1.DocumentTemplateRef = DocumentTemplateID
join DocumentNode on DocumentRef = d1.DocumentID
) as tt
where tt.repeatitions > 1;

Логика такая: разбить весь массив строк на группы по значениям из DocumentNodeValue. В каждой из групп посчитать количество строк. Выдать все строки из массива с подсчитанным количеством. Взять только строки попавшие в группы, в которых насчитано более 1 строки. + distinct на ваше усмотрение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы