Sql 多行筛选并计算百分比

Sql 多行筛选并计算百分比,sql,sql-server,sum,pivot,percentage,Sql,Sql Server,Sum,Pivot,Percentage,我是SQL新手。我正在处理一个数据库,在那里我需要过滤,然后计算百分比。下面是示例表。 应采取的步骤: 第一个筛选器列的性质,它仅具有创建、审阅和协调功能 按列、团队、团队、客户分组并计算小时数 然后根据上述组计算创建、审核和协调的百分比 最终我需要输出列团队、团队团队、客户、%创建、%审核和%协调 提前谢谢。 您可以使用where子句进行筛选,然后使用groupby和sum。要计算百分比,直接方法是avg()和条件聚合 select team, client, sum(hours) sum

我是SQL新手。我正在处理一个数据库,在那里我需要过滤,然后计算百分比。下面是示例表。 应采取的步骤:

  • 第一个筛选器列的性质,它仅具有创建、审阅和协调功能
  • 按列、团队、团队、客户分组并计算小时数
  • 然后根据上述组计算创建、审核和协调的百分比
  • 最终我需要输出列团队、团队团队、客户、%创建、%审核和%协调
提前谢谢。

您可以使用
where
子句进行筛选,然后使用
groupby
sum
。要计算百分比,直接方法是
avg()
和条件聚合

select team, client, sum(hours) sum_hours,
    avg(case when nature = 'create'     then 100.0 else 0 end) percent_create,
    avg(case when nature = 'review'     then 100.0 else 0 end) percent_review,
    avg(case when nature = 'coordinate' then 100.0 else 0 end) percent_coordinate
from mytable
where nature in ('create', 'review', 'coordinate')
group by team, client

根据你的样本数据,结果表应该是什么样的?团队团队团队客户协调创建审核总结小时审核百分比协调创建百分比团队1团队BB ABC1 3 1 9 0%33%11%1团队CC ABC1 2 100%0%0%1团队DD ABC1 4 0%0%0%2团队BB ABC2 7 27 26%0%0%2团队CC ABC2 6 0%0%38%2团队DD ABC2 8 0%100%0%团队3团队BB ABC3 19 17 13 64 20%30%27%团队3团队CC ABC3 14 18 32 56%44%0%团队3团队DD ABC3 12 28 0%0%43%I已在主查询中添加输出图像。感谢您MSG 8114,16级,状态5,第1行将数据类型nvarchar转换为数字时出错。对于我试图执行的总和,我得到了这个错误。如何更改数据类型?我使用“sum(cast([Hours]作为小数点))作为sum_-Hours,我还尝试了“sum(cast([Hours]作为数字))作为sum_-Hours”做得不好!我喜欢计算组百分比的方式。Cool@Rock使用try_convert(数字(12),[hours]),如果列包含无法转换的内容,则返回null