我有一个由ApplicationName(ApplicationAlias)组成的数据集,然后是UserName的不同计数
用户希望报告汇总(这些应用的前20个,但添加了所有先前行的用户名计数(组合不同)。
目前我只能想到使用一个带有大约20个联合的集合运算符,所有查询都具有如上所示的串联,几乎不理想。
还有其他办法吗?
我正在使用SQL Server及其ApplicationAlias和UserName的单表
但是还有另一个工具,因为他们 ONLY 想要计算有问题的应用程序的用户,即列表之外的任何其他用户(即标准构建应用程序,Adobe Acrobat,Microsoft Office)不应包括字。
我认为这在SQL中几乎是不可能的,或者至少只能通过部分语句在Excel的帮助下收集数据?
CREATE TABLE [dbo].[usersApps](
[UserName] [varchar](100) NULL,
[ApplicationAlias] [nvarchar](100) NULL
)
|用户名| ApplicationAlias |
| 10008 |标准构建应用程序|
| 10008 | Adobe Acrobat |
| 10056 | Microsoft Office Word |
| 10056 | Microsoft Office Excel |
| 10059 | Symantec PGP Desktop |
答案 0 :(得分:1)
所以,鉴于您最近的编辑,看起来您想要两列,逗号分隔的应用列表和您的用户。
"标准构建应用程序,Adobe Acrobat",10008
" Microsoft Office Word,Microsoft Office Excel",10056
Symantec PGP Desktop",10059
如果要在sql中创建逗号分隔列表,可以执行FOR XML PATH
和STUFF
。
SELECT apps =
STUFF((SELECT ', ' + ApplicationAlias
FROM usersApps b
where b.UserName = a.UserName
FOR XML PATH('')), 1, 2, ''),
UserName
FROM usersApps a
GROUP BY UserName
查看我的SQL Fiddle
如果要排除应用程序名称,只需添加where not in子句。