首页 > 解决方案 > 如果总计为 0,则删除结果组

问题描述

我正在使用下表创建一个堆积条形图 - 它比这个大一点:

ID | Name | foodEaten | total
1  | Sam  | Burger    | 3
1  | Sam  | Pizza     | 1
1  | Sam  | Kebab     | 0
1  | Sam  | Cheesecake| 3
1  | Sam  | Sandwich  | 5
2  | Jeff | Burger    | 0
2  | Jeff | Pizza     | 0
2  | Jeff | Kebab     | 0
2  | Jeff | Cheesecake| 0
2  | Jeff | Sandwich  | 0

我需要找到一种方法来删除像 Jeff 这样的结果。他吃的东西的总和是0。我想不出最简单的方法来实现这一点。我已经尝试按 Id 对整个结果进行分组并创建一个总数,但它只是没有发生。

如果这个人总共吃了0个食物,那么他需要被排除在外。但如果他没有,而且他没有吃任何烤肉串,如我上表所示,这需要包含在结果中!

所以需要的输出是:

ID | Name | foodEaten | total
1  | Sam  | Burger    | 3
1  | Sam  | Pizza     | 1
1  | Sam  | Kebab     | 0
1  | Sam  | Cheesecake| 3
1  | Sam  | Sandwich  | 5

标签: sqlsql-servergroup-by

解决方案


假设您想要显示的数据,而不是聚合出来然后排除:

WITH CTE AS (
    SELECT ID,
           [Name],
           foodEaten,
           total,
           SUM(total) OVER (PARTITION BY [Name]) AS nameTotal
    FROM YourTable)
SELECT ID,
       [Name],
       foodEaten,
       total
FROM CTE
WHERE nameTotal > 0;

推荐阅读