Как вернуть только отдельные результаты в пределах одного столбца, допуская дубликаты в других столбцах? - PullRequest
0 голосов
/ 11 января 2020

Мне трудно понять, как вывести то, что я хочу. Я хочу удалить дубликаты только из одного столбца, но разрешить дубликаты в других столбцах. Я внутренне соединяю три таблицы (a, b, c), используя первичные и внешние ключи. Вот что у меня есть, кто-нибудь объяснит, как изменить этот запрос для вывода записей, имеющих уникальное значение в COLU2, и в то же время разрешать дубликаты в окружающих столбцах (COLU1, COLU3)?

QUERY:

DECLARE @Email NVARCHAR(50)
SET @Email = 'user@email.com'
SELECT a.nameF, a.nameL, a.email b.TestName, c.testScore FROM a
INNER JOIN b
ON a.a_primaryKey=b.a_foreignKey
INNER JOIN c
ON b.b_primaryKey=c.b_foreignKey
WHERE a.email = '%' + @Email + '%'

CURRENT OUTPUT:

    COLU1      | COLU2 | COLU3
------------------------------
user@email.com | test1 | 80
user@email.com | test1 | 90
user@email.com | test2 | 83
user@email.com | test3 | 89

WISHLIST OUTPUT:

    COLU1      | COLU2 | COLU3
------------------------------
user@email.com | test1 | 80
user@email.com | test2 | 83
user@email.com | test3 | 89

Я пробовал DISTINCT после SELECT вместе с GROUP BY, но не смог заставить его работать. Спасибо всем.

1 Ответ

0 голосов
/ 11 января 2020

Я хочу удалить дубликаты только из одного столбца, допуская дубликаты в других столбцах.

Использовать агрегацию: все столбцы, чьи отдельные значения вы хотите сохранить go в GROUP BY, и вы можете использовать статистическую функцию для другого столбца:

SELECT a.nameF, a.nameL, a.email b.TestName, MIN(c.testScore) score
FROM a
INNER JOIN b ON a.a_primaryKey=b.a_foreignKey
INNER JOIN c ON b.b_primaryKey=c.b_foreignKey
WHERE a.email = '%' + @Email + '%'
GROUP BY a.nameF, a.nameL, a.email b.TestName
...