Вернуть максимальное значение в строке, содержащей дубликаты в доступе - PullRequest
2 голосов
/ 07 мая 2020

Кажется, я просто не могу найти ответ ... У меня есть таблица

users

name | cat 1 | cat 2 | cat 3 
-------------------------------------------
Karl                        1              
Karl   medium      T        1                        
James  high        T        1                                              
James  medium      T        1                    
James                       1                 
Toni   medium      T        1                       
Toni   high        T        1                  
Toni                        1              
Klara                       1    
Laura                       1                
Thomas                      1                    
Tobi   medium      T        1                                  
Tobi                        1                  

И я хотел бы, чтобы результат был таким: таблица, в которой хранятся записи каждого человека, но только сохраняет запись наивысшего значения из категории 1.

users

name | cat 1 | cat 2 | cat 3 
-------------------------------------------             
Karl   medium      T        1                        
James  high        T        1                                                                                  
Toni   high        T        1                               
Klara                       1    
Laura                       1                
Thomas                      1                    
Tobi   medium      T        1                                                  

Ближайшее, что я нашел к решению, было это, но оно возвращает только самые низкие значения, при изменении MIN на MAX он возвращает все строки .. .

SELECT DISTINCT * FROM users
WHERE users.[cat 1] IN
(SELECT MIN([cat 1]) FROM users GROUP BY [name])

1 Ответ

1 голос
/ 07 мая 2020

Требуется поле уникального идентификатора - автономер должен служить. Затем используйте вложенный запрос TOP N. Работайте с нулями, потому что Null сначала сортирует в порядке возрастания.

Если высокие и средние значения - единственные, учтите:

SELECT * FROM users
WHERE ID IN
(SELECT TOP 1 ID FROM users AS Dupe WHERE Dupe.Name=Users.Name 
    ORDER BY Nz([Cat 1],"ZZ"));

В противном случае преобразуйте текстовые значения в numeri c:

SELECT * FROM users
WHERE ID IN
(SELECT TOP 1 ID FROM users AS Dupe WHERE Dupe.Name=Users.Name 
    ORDER BY Switch([cat 1]="high",1, [cat 1]="medium",2, [cat 1]="low",3, True,4));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...