SQL分组具有不同值的条目

时间:2017-10-30 10:17:24

标签: sql oracle

假设我有一个显示来自不同表格的ID和值的报告

  | ID | VALUE |
  |----|-------|
1 | 1  | 1     |
2 | 1  | 0     |
3 | 1  | 1     |
4 | 2  | 0     |
5 | 2  | 0     |

我的目标是显示包含分组ID和VALUE的表格。我对VALUE进行分组的规则是"如果VALUE包含至少一个' 1'然后显示' 1'否则显示' 0'"。

我当前的SQL是(简化的)

SELECT
    TABLE_A.ID,
    CASE
        WHEN TABLE_B.VALUE = 1 OR TABLE_C.VALUE NOT IN (0,1,2,3)
        THEN 1
        ELSE 0
    END AS VALUE
FROM TABLE_A, TABLE_B, TABLE_C
GROUP BY
    TABLE_A.ID
    (CASE
        WHEN TABLE_B.VALUE = 1 OR TABLE_C.VALUE NOT IN (0,1,2,3)
        THEN 1
        ELSE 0
    END)

输出如下

  | ID | VALUE |
  |----|-------|
1 | 1  | 1     |
2 | 1  | 0     |
3 | 2  | 0     |

这是我想要的输出的一半

  | ID | VALUE |
  |----|-------|
1 | 1  | 1     |
2 | 2  | 0     |

所以我的问题是:如何扩展我当前的SQL(或完全改变它)以获得我想要的输出?

2 个答案:

答案 0 :(得分:1)

如果在FOREIGN_VALUE列中只有0和1作为不同的值,那么在评论中使用HoneyBadger提到的max()函数将满足您的要求。

public class AppInitializer implements WebApplicationInitializer {
    public void onStartup(ServletContext container) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(AppConfig.class);
        ctx.setServletContext(container);
        ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/");
    }
}

答案 1 :(得分:0)

假设value始终为0或1,您可以执行以下操作:

select id, max(value) as value
from t
group by id;

如果value可以采用其他值:

select id,
       max(case when value = 1 then 1 else 0 end) as value
from t
group by id;