我有一个非常简单的查询,我需要对其进行透视,但我不知道如何根据我在文献中阅读的内容将其转换为透视表。我读过的所有内容都涉及硬编码的列或过于复杂。它必须更简单,否则我无法掌握 CTE。
查询是他们有权访问的用户名和客户端的列表。所以我有类似的东西:
user client
1 a
1 b
1 c
2 a
2 d
3 a
3 d
3 e
3 f
客户总数可能在 20 左右。一些用户可以访问所有客户端,而其他用户只能访问一两个。我想看到的是:
user a b c d e f
1 x x x
2 x x
3 x x x x
这涉及三个表:一个用户表、一个客户表和一个将用户与其客户联合起来的交叉引用表(权限)。
我已经尝试过类似以下的方法,但它显然不起作用(甚至无法编译)。
with usersclients(user_name, clients, client_code)
as
(
select users.user_name
from clients cli
left join
(select u.user_id, user_name, c.client_id, client_code, client_name
from permissions p inner join clients c on p.client_id = c.client_id
inner join users u on u.user_id = p.user_id
) user
on user.client_id = cli.client_id
)
select *
from usersclients
pivot (max(client_code) for client_code in (select client_code from clients)) as P
任何线索最感激!