假设我有一个显示来自不同表格的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(或完全改变它)以获得我想要的输出?
答案 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;