在一定限制下将结果压缩为1个结果

时间:2019-03-19 09:28:04

标签: sql sql-server

因此,我有一个结果集,该结果集在1列中占总数的百分比,在另一列中有名称。

例如-

 Name | Percentage
 Jill | 12
 Sam  | 24
 Steve| 2
Jeff  | 3
Elvis | 59

我正在尝试将少于15%的任何结果压缩成行,

所以我的结果将是

         Name | Percentage
 Everyone else| 17
         Sam  | 24
        Elvis | 59

谢谢!

3 个答案:

答案 0 :(得分:0)

在源自的表(子查询)中使用case 表达式(子查询)将所有不足15%的人放在一起。 GROUP BY其结果:

select name, sum(Percentage)
from
(
    select case when Percentage > 15 then name
                else 'Everyone else'
           end as name,
           Percentage
    from tablename
) dt
group by name

答案 1 :(得分:0)

您可以使用APPLY

SELECT tt.Name, SUM([Percentage]) AS [Percentage]
FROM table t CROSS APPLY
     ( VALUES (CASE WHEN [Percentage] < 15 
                    THEN 'Everyone else' 
                    ELSE Name 
               END) 
     ) tt(Name)
GROUP BY tt.Name;

答案 2 :(得分:0)

对于这样一个简单的条件,您可以只使用CASE表达式:

select (case when percentage < 15 then 'Everyone else'
             else name
        end) as name,
       sum(percentage) as percentage
from t
group by (case when percentage < 15 then 'Everyone else'
               else name
          end)
order by sum(percentage) asc;