MS Access SQL Как устранить повторяющиеся значения - PullRequest
0 голосов
/ 24 октября 2019

Я просмотрел так много похожих постов, что у меня кружится голова, но ни одна из них не решает эту конкретную проблему, но, возможно, я не понял ответа. Приведенный ниже запрос дает результаты с дубликатами записей s.ID из-за объединения таблицы c. Каков наилучший способ исключить строки в наборе результатов с дублирующимися значениями s.ID? Я предпочел бы сохранить эти дубликаты записей с MAX (c.ID) и исключить другие.

Select (o.fld1 & ' ' & o.fld2) as Name, 
  g.name, 
  (Select Count(*) from sd where s.ID=sd.ID) as TheCount, 
  sm.*, 
  l.name, 
  t.name, 
  s.ID, 
  s.name, 
  c.ID
From ((((((
  s Inner Join c on s.fld2=c.fld2) 
  Inner Join o on s.oID=o.ID) 
  Inner Join g on s.gID=g.ID) 
  Left Join sm on s.smID=sm.ID) 
  Inner Join l on s.lID=l.ID) 
  Inner Join t on s.tID=t.ID) 
Where c.fld3 IN (1,3,5)
Order By s.ID ASC, c.ID ASC

Это упрощение, но я думаю, что он охватывает все основные элементы. Например, предложение select имеет больше элементов, но, по крайней мере, один встроенный SQL-запрос и одно созданное имя поля и одно «table. *», Как в примере;и предложение Where может быть намного более сложным в зависимости от пользовательских критериев фильтра.

Пример строки результата может быть:

s.ID    c.ID   ...
1       1
1       3
2       3
2       5

Я бы хотел, чтобы строки № 1 и № 3 не возвращались внабор результатов. Сохранение строк с помощью MAX (c.ID) для дублирующихся строк s.ID.

1 Ответ

1 голос
/ 24 октября 2019

Вы можете просто проверить свое предложение where на отсутствие пары sc с более высоким значением c.ID

Select (o.fld1 & ' ' & o.fld2) as Name, 
  g.name, 
  (Select Count(*) from sd where s.ID=sd.ID) as TheCount, 
  sm.*, 
  l.name, 
  t.name, 
  s.ID, 
  s.name, 
  c.ID
From ((((((
  s Inner Join c on s.fld2=c.fld2) 
  Inner Join o on s.oID=o.ID) 
  Inner Join g on s.gID=g.ID) 
  Left Join sm on s.smID=sm.ID) 
  Inner Join l on s.lID=l.ID) 
  Inner Join t on s.tID=t.ID) 
Where not exists (select 1 from s s2 join c c2 on s2.fld2=c2.fld2 WHERE s2.ID=s.ID and c2.ID>c.ID and c2.ID IN (1,3,5))
Order By s.DateAndTime ASC, s.fld9 ASC, c.fld4 ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...