我正在尝试创建一个查询,该查询将输出一个列的计数,然后列出它计数的名称:
表1: license_granted
users checkout
Bob 2014-11-18 01:00:00
Steve 2014-11-18 01:00:00
Bob 2014-11-18 01:30:00
Chris 2014-11-18 01:30:00我能够进行计数并获得以下输出:
checkout_time ctUsers
2014-11-18 01:00:00 2
2014-11-18 01:30:00 2
SELECT COUNT(DISTINCT users) AS ctUsers, checkout
FROM license_granted
GROUP BY checkout 我想要得到的是:
checkout_time ctUsers userlist
2014-11-18 01:00:00 2 Bob,Steve
2014-11-18 01:30:00 2 Bob,Chris这可以在查询中完成吗?
谢谢
更新11/20好的,我进一步挖掘了一下,找到了一个解决方案,可以给我结账时间和用户列表。现在我正在尝试弄清楚如何计算用户列表中的元素:
SELECT a.ctDate, SUBSTRING(d.users,1, LEN(d.users) - 1) usersList, count(d.users) AS ctUsers
FROM (
SELECT DISTINCT convert(varchar(10), deniedTime, 126) AS ctDate
FROM hyperworks_checkouts
) a
CROSS APPLY
(
SELECT DISTINCT [username] + ', '
FROM hyperworks_checkouts AS B
WHERE A.ctdate = convert(varchar(10), deniedTime, 126)
FOR XML PATH('')
) d (users)输出现在如下所示:
ctDate usersList
2014-01-15 Bob
2014-01-16 Steve,Bob
2014-01-17 Mike,Chris,Jerry如果我尝试在Select中添加COUNT(d.users),我每次都会得到计数1,因为有一个列表。如何统计d.users中的用户数?
谢谢
发布于 2014-11-20 06:04:26
我认为GROUP_CONCAT函数就是您要找的。
因此,对于您的示例,请尝试:
SELECT COUNT(DISTINCT users) AS ctUsers, checkout, GROUP_CONCAT(DISTINCT users)
FROM license_granted
GROUP BY checkout您还可以通过在GROUP_CONCAT查询中添加SEPARATOR子句来定义GROUP_CONCAT值的自定义分隔符。GROUP_CONCAT(DISTINCT users SEPARATOR ' '
发布于 2014-11-21 04:40:09
我找到了一个解决方案。在看了一些帖子之后,我能够拼凑出我需要的解决方案:
SELECT a.ctDate, SUBSTRING(d.users,1, LEN(d.users) - 1) usersList,
(select len(d.users) - len(replace(d.users, ',', ''))) AS ctUsers
FROM (SELECT DISTINCT convert(varchar(10), deniedTime, 126) AS ctDate
FROM hyperworks_denials
) a
CROSS APPLY
(
SELECT DISTINCT [username] + ', '
FROM hyperworks_denials AS B
WHERE A.ctdate = convert(varchar(10), deniedTime, 126)
FOR XML PATH('')
) d (users) 感谢所有给出建议的人
发布于 2014-11-20 12:13:23
请尝试以下查询:
SELECT COUNT(DISTINCT users) AS ctUsers, checkout,to_char(wm_concat(users)) Name
FROM license_granted
GROUP BY checkout https://stackoverflow.com/questions/27027875
复制相似问题