vermanishad Ответов: 2

Выберите DISTINCT в одном столбце с возвращением нескольких столбцов, запрос ms access


У меня есть запрос , который возвращает около 20 столбцов, но мне нужно, чтобы он отличался только одним столбцом.

мои данные выглядят примерно так

id val1 val2 val3
1    33   m    k
1    32   m    k
2    34   j    v
4    47   h    l


результат должен быть таким
id val1 val2 val3
1    33   m    k
2    34   j    v
4    47   h    l


У меня есть
Выберите Distinct id, val1, val2, val3
Из табл. 1

Группа по лани тоже не работает...

ZurdoDev

Ты не можешь этого сделать. Как SQL узнает, какой идентификатор 1 строки вам нужен? Тот, у которого val1 из 33 или val1 из 32?

vermanishad

я хочу только показать различных val2 организовать

ZurdoDev

Ну, та же проблема. Как sql узнает, какую строку вы хотите, val2, которая имеет id1 и val1 из 33 или ту, которая имеет id 1 и val1 из 32? Вы должны сказать sql именно то, что вы хотите.

vermanishad

id val1 val2 val3
1 33 м к
1 32 м к
2 34 j v
4 47 h l это моя ценность
только один отчетливый в использовании
результат должен быть таким
id val1 val2 val3
1 33 м к
2 34 j v
4 47 ч л
val2 только отметить особым, как использовать плзз

ZurdoDev

Вы не понимаете меня.

Ты говоришь, что хочешь пластинку
1 33 м к

Но есть и другой рекорд для м.
1 32 м к

Вы должны сказать sql, какой из них вы хотите. Можете ли вы объяснить, какой из них вы хотите по-английски?

Maciej Los

MS Access или SQL Server?

vermanishad

С КТР как
( SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY val1 DESC) AS rn
С моего стола
)
ВЫБИРАТЬ *
От cte
Где rn = 1-это наилучший результат

2 Ответов

Рейтинг:
12

OriginalGriff

Попробуй:

WITH cte AS
(   SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY val1 DESC) AS rn
    FROM MyTable
)
SELECT *
FROM cte
WHERE rn = 1


vermanishad

спасибо сэр работает и спасибо за это решение очень очень много

pates

отлично сработало и для меня - спасибо, спасибо!!

OriginalGriff

Всегда пожалуйста!

SyedAhamed

Идеальный. Спасибо

Рейтинг:
12

Maciej Los

Попробовать это:

SELECT t1.<Field_List>
FROM TableName1 AS t1 INNER JOIN (
SELECT MAX(val1) AS val1
FROM TableName1 
) AS t2 ON t1.id = t2.id AND t1.val1 = t2.val1