oracle - SELECT Records > 0 并且没有 NULL 值
问题描述
我有一个查询,其中我正在生成包含 0 值的行的结果。我想排除列 B 或 C = 0 的任何行。为了排除这些行,我添加了 T2.A <> 0 和 T2.A != 0。当我这样做时,0 值被替换为空值。因此,我还添加了 T2.A IS NOT NULL。
我的结果仍然会产生我不需要的列,这些列显示(null)并希望排除这些列。
SELECT
(SELECT
SUM(T2.A) as prem
FROM Table_2 T2, Table_2 T1
WHERE T2.ENT_REF = T1.ENT_REF
AND UPPER(T2.PER) = 'HURR'
AND UPPER(T2.ENT_TYPE) = 'POL'
AND T2.Cov NOT IN ('OUTPROP','COV')
AND T2.A <> 0
AND T2.A IS NOT NULL
) as B,
(SELECT
SUM(T2.A) as prem
FROM Table_2 T2, Table_2 T1
WHERE T2.ENT_REFE = T1.ENT_REF
AND UPPER(T2.PER) IN ('I', 'II', 'II')
AND UPPER(T2.ENT_TYPE) = 'POL'
AND T2.Cov NOT IN ('OUTPROP','COV')
AND T2.A <> 0
AND T2.A IS NOT NULL
) as C
理想情况下,结果将来自:
+----+--------+--------+
| ID | B | C |
+----+--------+--------+
| 1 | 24 | 123 |
| 2 | 65 | 78 |
| 3 | 43 | 89 |
| 3 | 0 | 0 |
| 4 | 95 | 86 |
| 5 | 43 | 65 |
| 5 | (null) | (null) |
+----+--------+--------+
类似于以下内容:
+----+-----+-----+
| ID | B | C |
+----+-----+-----+
| 1 | 24 | 123 |
| 2 | 65 | 78 |
| 3 | 43 | 89 |
| 4 | 95 | 86 |
| 5 | 43 | 65 |
+----+-----+-----+
我也尝试过不同的值,但我还有其他列,例如每行不同的日期。虽然我需要包含日期,但它们对我来说并不像只获取值 > 0 的 B 和 C 列那么重要。我也尝试过使用 GROUP BY ID 语句,但我收到一个错误,指出“ORA-00979:不是 GROUP BY 表达式'
解决方案
我猜你是在正确的轨道上,试图对价值观进行分组。
为了做到这一点,列(应该是不同的)将被单独保留(例如ID
在下面的示例中),而其余的应该被聚合(使用min
,max
或任何其他你认为合适的)。
例如,正如您所说,有一些您不关心的日期列-我的意思是,您将选择其中的哪一个-然后选择第一个(即min(date_column)
)。同样,您可以处理其余部分。该group by
子句应包含所有非聚合列(id
在本例中)。
select id,
sum(a) a,
sum(b) b,
min(date_column) date_column
from your_current_query
group by id
推荐阅读
- hazelcast - 使用基于地图条目的 ttl 在 hazelcast 地图中批量加载
- c# - 使用 Xero.NetStandard.OAuth2.Api 将文件附加到 xero 发票
- python - 使用 PyTorch 计算函数的导数
- html - 单击行中的按钮时,在 tr 标记中触发不需要的功能
- time - 如何在一天中的特定时间运行 cypress 测试?
- javascript - 根据 object.differentValue === 静态值仅将 object.value 存储到 set() 中
- asp.net - 使用 Azure AD 保护 ASP.NET Core Web API
- c# - Xamarin Android Java 绑定库 .aar CS0102 类型“EventEventArgs”已包含“p0”的定义
- postgresql - PostgreSQL 中的枢轴总和
- javascript - nodejs + jest:ReferenceError:未定义描述