Mar*_* B. 5 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
Run Code Online (Sandbox Code Playgroud)
我能够计算并得到以下输出:
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
Run Code Online (Sandbox Code Playgroud)
我想得到的是:
checkout_time ctUsers userlist
2014-11-18 01:00:00 2 Bob,Steve
2014-11-18 01:30:00 2 Bob,Chris
Run Code Online (Sandbox Code Playgroud)
这可以在查询中完成吗?
谢谢
更新 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)
Run Code Online (Sandbox Code Playgroud)
现在的输出如下所示:
ctDate usersList
2014-01-15 Bob
2014-01-16 Steve,Bob
2014-01-17 Mike,Chris,Jerry
Run Code Online (Sandbox Code Playgroud)
如果我尝试在 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
Run Code Online (Sandbox Code Playgroud)
您还可以通过在 GROUP_CONCAT 查询中GROUP_CONCAT添加子句来定义值的自定义分隔符,即SEPARATORGROUP_CONCAT(DISTINCT users SEPARATOR ' '
| 归档时间: |
|
| 查看次数: |
15099 次 |
| 最近记录: |