SQL使用不同的值对条目进行分组
假设我有一个报告,其中显示了来自不同表的ID和值SQL使用不同的值对条目进行分组,sql,oracle,Sql,Oracle,假设我有一个报告,其中显示了来自不同表的ID和值 | ID | VALUE | |----|-------| 1 | 1 | 1 | 2 | 1 | 0 | 3 | 1 | 1 | 4 | 2 | 0 | 5 | 2 | 0 | 我的目标是用分组ID和值显示此表。我对分组值的规则是“如果值至少包含一个“1”,则显示“1”,否则显示“0” 我当前的SQL是(简化的) 输出如下 | ID | VALUE | |----|------
| ID | VALUE |
|----|-------|
1 | 1 | 1 |
2 | 1 | 0 |
3 | 1 | 1 |
4 | 2 | 0 |
5 | 2 | 0 |
我的目标是用分组ID和值显示此表。我对分组值的规则是“如果值至少包含一个“1”,则显示“1”,否则显示“0”
我当前的SQL是(简化的)
输出如下
| ID | VALUE |
|----|-------|
1 | 1 | 1 |
2 | 1 | 0 |
3 | 2 | 0 |
这是我想要的输出的一半
| ID | VALUE |
|----|-------|
1 | 1 | 1 |
2 | 2 | 0 |
因此,我的问题是:如何扩展当前SQL(或完全更改它)以获得所需的输出?如果在FOREIGN\u VALUE列中只有0和1作为不同的值,那么使用Honeybager在注释中提到的max()函数将满足您的要求
SELECT
ID,
MAX(FOREIGN_VALUE) AS VALUE
FROM (SELECT
ID,
CASE WHEN FOREIGN_VALUE = 1
THEN 1
ELSE 0
END AS FOREIGN_VALUE
FROM TABLE,
FOREIGN_TABLE)
GROUP BY
ID;
假设
值始终为0或1,则可以执行以下操作:
select id, max(value) as value
from t
group by id;
如果值
可以采用其他值:
select id,
max(case when value = 1 then 1 else 0 end) as value
from t
group by id;
为什么不选择MAX()
?您使用的是哪种产品?博士后?神谕“SQL”只是一种查询语言,而不是特定数据库产品的名称Structres@GummiBoat这里你不提供表,外来的表结构,这里可能只存在表结构。我不好,我想标准的SQL就足够了。我添加了Oracle标签。我在Oracle SQL Developer工作。表结构有点复杂,我不明白为什么它们会重要。我自己设置1和0,FOREIGN_VALUE=1不是最终SQL中的唯一条件,这就是为什么我在使用CASE时遇到麻烦。我认为MAX不是正确的方法,因为-正如我已经说过的-有多个条件来设置值行,我不能直接用MAX引用一列,除非有一种方法可以最大化我新创建的值列。请提及一些其他条件,以清楚了解您的需求。感谢编辑半径。@GummiBoat我认为您应该在问题中更加明确,以获得更准确的响应,以满足您的需要我编辑了我问题的SQL,我认为我无法提供更多的信息。如果我尝试实现上面的SQL,我不会得到任何结果,因为服务器一直在查询。实际上,我是个白痴,当我离开我的小组时,我忘记了处理这个问题。现在它起作用了。非常感谢。
select id,
max(case when value = 1 then 1 else 0 end) as value
from t
group by id;