sql - 查询以获取基于多于 1 列的行中的总计
问题描述
鉴于此表布局
primary_status | submitted_total_A | total_paid_A | secondary_status | submitted_total_B | total_paid_B
O | 100.00 | 0 | C | 250.00 | 250.00
C | 150.00 | 150.00 | N | 0.00 | 0.00
C | 300.00 | 0 | O | 50.00 | 25.00
O | 400.00 | 50.00 | O | 500.00 | 100.00
我正在尝试获得 submit_total_A - total_paid_A (当primary_status = 'O')+ submit_total_B - total_paid_B (当secondary_status = 'O')的总和。所以基本上,当任一状态列包含“O”时,相关的“A”和“B”列将包含在新列“row_total”的计算中。
预期结果将是:
*第 1 行“row_total”将为 100.00(仅包括“A”列差异)
*第 2 行“row_total”将为 0.00(状态列均不包含“O”)
*第 3 行“row_total”将为 25.00(仅包括“B”列差异)
*第 4 行“row_total”将为 750.00(包括“A”和“B”列的差异)
这是我的查询,但我知道该值是错误的,因为当任一状态为“O”时,“OR”将同时选择“A”和“B”:
SELECT ( submitted_total_a - total_paid_a + submitted_total_b - total_paid_b )
AS
'row_total'
FROM table_1
WHERE primary_status = 'O'
OR secondary_status = 'O';
解决方案
SELECT ( CASE
WHEN primary_status = 'O' THEN ( submitted_total_a - total_paid_a )
ELSE 0
END ) +
( CASE
WHEN secondary_status = 'O' THEN ( submitted_total_b - total_paid_b )
ELSE 0
END ) row_total
FROM table
的简单使用CASE WHEN
,它就像一个[if, else]
条件块,相当于switch/case
PHP 中的 a
推荐阅读
- json - Alexa 添加到收藏夹
- wpf - WPF - 如何在子类控件(组合框)中获取模板化部分
- c# - 如何重复运行这个程序?
- maven - pom.xml Maven 中的配置文件
- swift - swift - 不能让我的 if 语句按我的需要工作
- angular - 不要在没有嵌套的情况下渲染 Angular 容器组件
- homebrew - 为什么有些自制配方显示它们与另一个配方有冲突?
- java - 写入输出流时出错。插座关闭
- c# - 当我更改 OnModelCreating 时,add-migration 为空
- sql - 您如何将 WHERE NOT EXISTS 与 WITH 一起使用?