sql - 查询以查找要聚合的不同字符串
问题描述
我有一个名为logoninfo
. 下面是架构。
Record ID|User ID | Computer ID |LOGON_TIME|LOGOFF_TIME
如果注销时间为 0,则用户当前已登录计算机。用户名在名为“user”的单独表中,带有模式
user id | user name
计算机名称在名为“computer”的单独表中,带有架构
computer id | computer name
我需要一份报告,其中包含用户名及其对应的当前登录计算机(以逗号分隔)
user name | computer names
我使用了以下查询,但在某些情况下会导致重复的计算机(同一台计算机显示不止一次)。
select user.name as USER_NAME,
userLogon."comps" as COMPUTERS
from user
inner join (
select user_id as "user_resource",
string_agg(compRes.name, ' ,') as "comps"
from logoninfo
inner join computer compRes on logoninfo.computer_id = compRes.computer_id
where logoninfo.logoff_time = 0
group by logoninfo.user_id
) userLogon on userLogon."user_resource" = user.user_id
所以我尝试添加distinct
功能string_agg
,但在 SQL Server 中是不可能的。
请帮我查询所需的报告。
提前致谢。
解决方案
我是这样做的。你可以删除#
标志,这意味着我使用了一个临时表。
SELECT u.name as [USER_NAME]
, l.comps as [COMPUTERS]
FROM #user u
OUTER APPLY (
SELECT STRING_AGG(c.name, ', ') as [comps]
FROM (
SELECT c.name
FROM #logoninfo l
JOIN #computer c ON l.computer_id = c.computer_id
WHERE l.user_id = u.user_id
AND l.logoff_time = 0
GROUP BY c.name
) c
) l
结果是:
推荐阅读
- twilio - 我可以在 jQuery 中使用 Twilio Video JS SDK 2.0 吗?
- charts - 如何在 Flutter 中的甜甜圈饼图的孔内添加文本
- android - Play 商店应用发布需要 3 天以上才能上传
- java - 带有junit的Spring Boot错误@Autowired RestTemplateBuilder
- mysql - 主键和外键查询
- python - Pandas:根据另一列增加或重置计数
- python - 如何为模拟对象命名?
- c# - 如何在不使用 string.replace 的情况下用另一个字符替换一个字符?
- javascript - 如何让 webpack 只解析一次常见的第三个包
- php - Woocommerce - 我的帐户 - 添加付款方式不起作用