sql - 如何在多列中计算一个变量

标签 sql sql-server tsql crystal-reports

我正在处理 Crystal Report,但无法找到在 Crystal 或 MSSQL 中执行此操作的方法

我有一个包含用户名的表格,当在如下网络应用程序中完成事件时会记录这些用户名

UID Approved    Denied  Moved   Pended
1   Tom         null    null    Bill
2   null        null    Bill    null
3   Bill        null    Tom     null
4   null        Tom     null    null
5   Tom         null    Bill    Bill
6   null        Bill    Bill    null
7   Tom         null    null    Bill

我需要生成如下生产力报告

        Approved    Denied  Moved   Pended
Tom     3           1       1       0
Bill    1           1       3       3

我不确定如何按数据中的名称对计数进行分组?

最佳答案

您还可以使用 pivot 和 unpivot 语法,如下所示: See working demo

select 
Name,
[approved]=ISNULL([approved],0),
[denied]=ISNULL([denied],0),
[moved]=ISNULL([moved],0),
[pending]=ISNULL([pending],0) 
from
(
    select 
      Name,activity,count(1) c 
    from
    (select * from useractivity )s
    unpivot (Name for activity in ([approved],[denied],[moved],[pending]))up
    group by Name,activity
) s
pivot (sum(c) for activity in ([approved],[denied],[moved],[pending]))p

关于sql - 如何在多列中计算一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47704754/

相关文章:

sql-server - 在数据库中存储枚举值

sql - SQL Server 窗口函数子句中的条件排序顺序

sql - Postgres替换字符串中的字符

sql - Postgres 中的时间序列查询

c# - 在Datagridview中添加下拉框

mysql - 试图获取名字和姓氏

sql - 有没有更好的方法来进行这种连接?

sql-server - 使用 SSIS 包访问数据库的 SQL 代理作业失败

sql-server - SQL Server 2008 - 触发器是否以与登录名/用户相同的权限运行?

sql-server - 为什么 LIKE 比 = 快?