求1SQL语句,按照频次排序

求一SQL语句,按照频次排序
目前有两个表:
表1:Source     用于记录每一单的客户名称和对应的操作人员,结构如下
订单编号     客户名称        操作员工
1                    客户1             员工3    
2                    客户1            员工1
3                    客户2            员工1
4                     客户6          员工4
5                    客户1           员工5
6                    客户3           员工1
7                   客户2           员工2

表2: workers     结构如下
人员编号  人员名字         员工归属      熟悉客户1     熟悉客户2    熟悉客户3
001              员工1            职工               NULL                 NULL           NULL
002             员工2             职工                  NULL               NULL           NULL
003              员工3            职工                 NULL                  NULL           NULL
004              员工4            临时工               NULL                NULL           NULL
005              员工5            职工                    NULL                 NULL         NULL
要实现如下要求:
1. 对于职工:熟悉客户1列自动填上表Source中该员工对应项目数最多的客户
                       熟悉客户2列自动填上表Source中该员工对应项目数第二多的客户
                      熟悉客户3列自动填上表Source中该员工对应项目数第三多的客户
                    如果没有则填上“无”
2. 对于临时工: 熟悉客户1列自动填上表Source中该员工对应项目数最多的客户,且项目数不少于3次,没有填上“无”
                             熟悉客户2列自动填上表Source中该员工对应项目数第二多的客户,且项目数不少于3次,没有填上“无”
                            熟悉客户2列自动填上表Source中该员工对应项目数第二多的客户,且项目数不少于3次,没有填上“无”
我写了个熟悉客户1的:
SELECT 人员编号,人员名字,员工归属,
                          (SELECT     TOP (1) 客户名称
                            FROM          Source
                            WHERE      (workers.人员名字 = 操作员工)
                            GROUP BY 客户名称
                            ORDER BY COUNT(客户名称) DESC) AS 熟悉客户1, 熟悉客户2, 熟悉客户3, 
FROM         workers
只能实现1.1的要求,其它的如何实现,请各位大神教我!!!
------解决思路----------------------
都1点了还没睡...
SELECT T1.人员编号,T1.人员名字,T1.员工归属
,MAX(CASE WHEN T2.RN=1 THEN T2.客户名称 END)熟悉客户1
,MAX(CASE WHEN T2.RN=2 THEN T2.客户名称 END)熟悉客户2
,MAX(CASE WHEN T2.RN=3 THEN T2.客户名称 END)熟悉客户3
FROM workers T1
LEFT JOIN(
SELECT *
FROM(
SELECT 操作员工,客户名称,COUNT(1)C
,ROW_NUMBER()OVER(PARTITION BY 操作员工 ORDER BY COUNT(1) DESC)RN
FROM(
SELECT 客户名称,操作员工 FROM [Source]
UNPIVOT([操作员工]FOR [TYPE]IN([操作员工1],[操作员工2],[操作员工3]))U
)T
WHERE 操作员工 IS NOT NULL
GROUP BY 操作员工,客户名称
)CTE
WHERE RN<=3
)T2 ON T1.人员名字=T2.操作员工 AND(T1.员工归属='职工'
OR(T1.员工归属='临时工' AND T2.C>=3))
GROUP BY T1.人员编号,T1.人员名字,T1.员工归属
ORDER BY 人员编号