oraclesql上的条件和
我以以下方式获得数据:oraclesql上的条件和,sql,oracle,sum,conditional-statements,Sql,Oracle,Sum,Conditional Statements,我以以下方式获得数据: ITEM LOCATION UNIT RETAIL QUANTITY 100 KS 10 -10 200 KS 20 30 我想要正数(数量>0)和负数(数量
ITEM LOCATION UNIT RETAIL QUANTITY
100 KS 10 -10
200 KS 20 30
我想要正数(数量>0)和负数(数量<0)之和
如何根据条件获取这些列的总和?您可以使用sum(CASE…)
:
选择项目、位置、,
求和(当数量大于0时,则数量为0结束)为正和,
总和(当数量小于0时,则数量为0结束)为负和
从你的桌子上
按项目、地点分组;
您可以将
最大值
和最小值
与求和
功能结合使用:
Oracle 11g R2架构设置:
CREATE TABLE table_name ( ITEM, LOCATION, QUANTITY ) AS
SELECT 100, 'KS', -10 FROM DUAL
UNION ALL SELECT 100, 'KS', -10 FROM DUAL
UNION ALL SELECT 100, 'KS', -20 FROM DUAL
UNION ALL SELECT 100, 'KS', 10 FROM DUAL
UNION ALL SELECT 100, 'KS', 5 FROM DUAL
UNION ALL SELECT 200, 'KS', 10 FROM DUAL
UNION ALL SELECT 200, 'KS', 20 FROM DUAL
UNION ALL SELECT 200, 'KS', 5 FROM DUAL
SELECT item,
location,
SUM( GREATEST( quantity, 0 ) ) AS positive_quantities,
SUM( LEAST( quantity, 0 ) ) AS negative_quantities
FROM table_name
GROUP BY item, location
| ITEM | LOCATION | POSITIVE_QUANTITIES | NEGATIVE_QUANTITIES |
|------|----------|---------------------|---------------------|
| 100 | KS | 15 | -40 |
| 200 | KS | 35 | 0 |
查询1:
CREATE TABLE table_name ( ITEM, LOCATION, QUANTITY ) AS
SELECT 100, 'KS', -10 FROM DUAL
UNION ALL SELECT 100, 'KS', -10 FROM DUAL
UNION ALL SELECT 100, 'KS', -20 FROM DUAL
UNION ALL SELECT 100, 'KS', 10 FROM DUAL
UNION ALL SELECT 100, 'KS', 5 FROM DUAL
UNION ALL SELECT 200, 'KS', 10 FROM DUAL
UNION ALL SELECT 200, 'KS', 20 FROM DUAL
UNION ALL SELECT 200, 'KS', 5 FROM DUAL
SELECT item,
location,
SUM( GREATEST( quantity, 0 ) ) AS positive_quantities,
SUM( LEAST( quantity, 0 ) ) AS negative_quantities
FROM table_name
GROUP BY item, location
| ITEM | LOCATION | POSITIVE_QUANTITIES | NEGATIVE_QUANTITIES |
|------|----------|---------------------|---------------------|
| 100 | KS | 15 | -40 |
| 200 | KS | 35 | 0 |
:
CREATE TABLE table_name ( ITEM, LOCATION, QUANTITY ) AS
SELECT 100, 'KS', -10 FROM DUAL
UNION ALL SELECT 100, 'KS', -10 FROM DUAL
UNION ALL SELECT 100, 'KS', -20 FROM DUAL
UNION ALL SELECT 100, 'KS', 10 FROM DUAL
UNION ALL SELECT 100, 'KS', 5 FROM DUAL
UNION ALL SELECT 200, 'KS', 10 FROM DUAL
UNION ALL SELECT 200, 'KS', 20 FROM DUAL
UNION ALL SELECT 200, 'KS', 5 FROM DUAL
SELECT item,
location,
SUM( GREATEST( quantity, 0 ) ) AS positive_quantities,
SUM( LEAST( quantity, 0 ) ) AS negative_quantities
FROM table_name
GROUP BY item, location
| ITEM | LOCATION | POSITIVE_QUANTITIES | NEGATIVE_QUANTITIES |
|------|----------|---------------------|---------------------|
| 100 | KS | 15 | -40 |
| 200 | KS | 35 | 0 |
我喜欢用
最大/最小值隐藏案例的想法:)你能将执行计划与我的解决方案进行比较吗?@lad2025毫不奇怪,它们都有相同的计划。如果你想分析他们,你可以看看他们是否有不同的表现(但我怀疑,因为他们做的完全一样)。最终归结到哪个更可读/更易于维护/更易于键入/等等。。。