Настройте дубликаты записей в запросе SQL - PullRequest
1 голос
/ 25 мая 2019

Я хочу настроить повторяющиеся строки, учитывая 2 столбца в запросе MS AccessSQL.

1) Если PrivateName каких-либо учителей отличается, тогда возьмите только PrivateName.
2) Если PrivateName всех учителей совпадает, тоВозьмите Concat (PrivateName, 1st Letter of LastName).
3) Если Result все еще содержит те же имена учителей, то Concate (PrivateName, LastName)

У меня есть tblTeachers именованная таблица со следующими данными.

TeacherID   PrivateName   LastName
1           aa            1
2           b             2
3           c             3
4           d             4
5           e             5
6           ab            6
7           g             7
8           h             8
9           i             9
10          aa            10
11          j             11
12          k             12
13          l             13
14          m             14
15          n             15
16          o             16
17          p             17
18          q             18
19          r             19
20          b             20

Я хочу ниже в качестве вывода:

TeacherID   TeacherName
1           aa 1
2           b 2
3           c
4           d
5           e
6           ab 6
7           g
8           h
9           i
10          aa 10
11          j
12          k
13          l
14          m
15          n
16          o
17          p
18          q
19          r
20          b 20

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Присоединиться к подзапросу, который находит количество вхождений каждого личного имени.В случае, когда личное имя встречается более чем для одного учителя, добавьте фамилию к личному имени в качестве выходного.

SELECT
    t1.TeacherID,
    IIF(t2.cnt > 1, t1.PrivateName & " " & STR(t1.LastName), t1.PrivateName) AS TeacherName
FROM yourTable t1
INNER JOIN
(
    SELECT PrivateName, COUNT(*) AS cnt
    FROM yourTable
    GROUP BY PrivateName
) t2
    ON t1.PrivateName = t2.PrivateName
ORDER BY
    t1.TeacherID;
0 голосов
/ 25 мая 2019

Тим ответит отлично (если я правильно понял вопрос). Другой способ написать это, который может иметь лучшую производительность:

select t.TeacherID,
       iif( exists (select 1
                    from t as t2
                    where t2.PrivateName = t.PrivateName and
                          t2.TeacherId <> t.teacherId
                   ),
            t.PrivateName & " " & str(t1.LastName),
            t.PrivateName
           ) as TeacherName
from t
order by t.TeacherID;

В частности, exists может использовать индекс на (name, TeacherId).

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...