我正在尝试创建一个查询,该查询将输出一列的计数,然后列出它计数的名称:
表 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 中的用户?
谢谢
最佳答案
我认为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 ' '
关于SQL 计数列和列表值计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27027875/