自定义SQL查询中的重复记录

时间:2019-05-25 08:25:15

标签: sql ms-access

我想考虑MS AccessSQL查询中的2列来自定义重复行。

1)如果任何教师的PrivateName不同,则仅采用PrivateName。
2)如果任何一位教师的PrivateName相同,则使用Concat(PrivateName,姓氏的第一个字母)。
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 个答案:

答案 0 :(得分:0)

加入一个子查询,该子查询查找每个私人名称的出现次数。如果确实有多个教师使用了私人姓名,则将姓氏附加到私人姓名作为输出。

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;

答案 1 :(得分:0)

Tim的回答非常好(如果我正确理解了这个问题)。可能有更好性能的另一种编写方法是:

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)上的索引。