【发布时间】:2018-08-08 09:17:05
【问题描述】:
我的表中有以下数据
ID code date amount health_plan 111 A123 20170101 10 BH 111 A123 20100101 -10 BH 311 A124 20170712 20 CVA 311 A124 20170712 -20 CVA 311 A124 20170712 20 CVA 311 A124 20180201 55 CVA
我创建了一个查询来显示那些具有相同 ID、代码和日期的正值和负值的记录。运行以下查询后,我期待这种类型的输出。
111 A123 20170101 10 BH 111 A123 20100101 -10 BH 311 A124 20170712 20 CVA 311 A124 20170712 -20 CVA
WITH amt_cur
AS (SELECT DISTINCT first_name,
last_name,
birth_date,
gender,
health_plan,
id,
code,
date,
amount
FROM table_a
WHERE (id,
code,
date,
health_plan) IN
(SELECT a.id,
a.code,
a.date,
a.health_plan
FROM table_a a
JOIN table_a b
ON b.health_plan = a.health_plan
AND b.id = a.id
AND b.date = a.date
AND b.code = a.code
AND b.amount <> a.amount
AND (a.amount > 0 AND b.amount < 0)))
SELECT *
FROM amt_cur
ORDER BY id, code, date;
但我得到以下输出
111 A123 20170101 10 BH 111 A123 20100101 -10 BH 311 A124 20170712 20 CVA 311 A124 20170712 -20 CVA 311 A124 20170712 20 CVA
有人可以帮助实现结果吗?
【问题讨论】:
-
您的数据丢失
health_plan,这对于了解您的查询应该如何工作很重要。 -
当相同(id、代码、日期)组合同时存在正数和负数时,它们是始终相同(绝对值,例如 +10 和 -10)还是可以不同( +10 和 -17)?它们总是成对出现(一负一正)吗?
-
负值和正值可能会发生变化。当两个金额的结果 = 0 时,我必须显示这些记录。例如,如果我有 +10 和 -17,那么结果是 -7,不需要显示。
-
所以:您的样本数据有重复的行。从顶部开始的第 5 行与第 3 行相同(所有列中的值相同)。您是说除了您所说的之外,您的要求是还删除重复项?否则,不清楚为什么您通过现有查询获得的输出是“不正确的”——对我来说它看起来非常好。如果从顶部开始的第 5 行中的值不是 20,而是 40,该怎么办?那么,您是否希望输出中从 #3 到 #5 的所有三行?如果不是,还有什么附加规则?