Sql 如何在不中断/划分字段的情况下生成多个聚合函数

Sql 如何在不中断/划分字段的情况下生成多个聚合函数,sql,sql-server,tsql,Sql,Sql Server,Tsql,是否可以在不中断/划分分组字段的情况下生成聚合函数?我进行了一次查询,但在第一个字段中它将被划分为重复值,以下是我的查询: SELECT TOP 5 empname AS 'EMP Name', SUM (CASE WHEN prod = 'P' THEN 1 ELSE 0 END) AS 'Count of Prod', COUNT (prod) AS 'Total Account', FORMAT (C

是否可以在不中断/划分分组字段的情况下生成聚合函数?我进行了一次查询,但在第一个字段中它将被划分为重复值,以下是我的查询:

SELECT      TOP 5 empname AS 'EMP Name',    
            SUM (CASE WHEN prod = 'P' THEN 1 ELSE 0 END) AS 'Count of Prod',
            COUNT (prod) AS 'Total Account',
            FORMAT (COALESCE (SUM (CASE WHEN prod = 'P' THEN 1 ELSE 0 END) / COUNT (prod), 0), 'P') AS '% Prod',
            DATEDIFF(DAY, t_start, t_end) as 'Duration Trip'
FROM        Sampletable
WHERE       empname NOT IN ('NA') AND 
            empname IS NOT NULL AND
            t_end IS NOT NULL
GROUP BY    empname, 
            prod,
            t_end,
            t_start
ORDER BY    [Count of Prod] DESC
我的预期结果:

Emp。名称 产品数量 总帐 %刺激 持续行程 环境管理计划1 62 63 98,41% 30 环境管理计划2 45 48 93,75% 28 环境管理计划3 20 22 90,91% 25 环境管理计划4 20 24 83,33% 22 环境管理计划5 15 19 78,95% 20
如果您希望每个
empname
有一行,那么这应该是
组by
中唯一的一列(或者是描述每个员工的其他列,但不乘以行数)

这就意味着:

SELECT TOP 5 empname,    
       SUM(CASE WHEN prod = 'P' THEN 1 ELSE 0 END) AS prod_count,
       COUNT prod) AS Total_Account,
       FORMAT(AVG(CASE WHEN prod = 'P' THEN 1.0 ELSE 0 END), '%P') AS prod_ratio,
       SUM(DATEDIFF(DAY, t_start, t_end)) as trip_duration
FROM Sampletable
WHERE empname NOT IN ('NA') AND 
      empname IS NOT NULL AND
      t_end IS NOT NULL
GROUP BY empname
ORDER BY prod_count DESC;
请注意对查询的一些更改:

  • 列别名已简化,因此不需要转义字符
  • 分组依据
    只有
    empname
  • 使用
    AVG()
    简化产品比例逻辑
  • 我假设行程持续时间应该是各个持续时间的总和
  • 我没有删除它,但是
    empname notnull
    是多余的,因为
    notin
    处理这个问题

向我们展示您的样本数据和实际结果。不要在标题中添加标签名称。。。标记它们就足够了。@Harle用户不会信任来自互联网上陌生人的文件;我们中的许多人都是专业人士,都知道从一个陌生人那里下载并打开一个文件是多么愚蠢和危险。把DDL和DML放在你的问题中。对不起,我是新手,我会把它放在DDL和DML中。对不起,我不知道如何在那里输入我的数据,你能建议我在哪里输入我的样本数据和我的查询结果吗?酷!谢谢戈登