SQL 计数列和列表值计数

标签 sql sql-server count

我正在尝试创建一个查询,该查询将输出一列的计数,然后列出它计数的名称:

表 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/

相关文章:

小数列的 SQL Sum 函数返回 int 而不是 decimal

c# - Entity Framework 多次调用 SQL Server

sql-server - 计算表中出现的次数

c# - 一种计算列表中出现次数的方法

php - mysql通过外键将主表与另一个表连接

mysql - 如何按列分组、按不同列排序以及将每个组限制为一行?

mysql查看超慢

c# - 建立中央 SqlConnection 的最佳方式

mysql - 使用 'AND' 和 COUNT(*)

mysql - 嵌套程序集数据库结构