我想考虑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
答案 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)
上的索引。