- 已关闭**。此问题需要超过focused。当前不接受答案。
- 想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。
3天前关闭。
此帖子已在2天前编辑并提交审核,无法重新打开帖子:
原始关闭原因未解决
Improve this question
示例数据如下所示:
DATE Count Code
02-JAN-2023 25 A
03-JAN-2023 10 A
05-JAN-2023 15 A
01-JAN-2023 5 B
02-JAN-2023 20 B
04-JAN-2023 6 B
05-JAN-2023 9 B
我需要将代码为"A"或"B"的行转换为A和B列,并创建另一列来计算A和B之间的差值(DIFF = A-B)。空值被视为0。结果应按日期分组和排序。
预期结果应为:
Date A B DIFFERENCE(A-B)
01-JAN-2023 5 -5
02-JAN-2023 25 20 5
03-JAN-2023 10 10
04-JAN-2023 6 -6
05-JAN-2023 15 9 6
3条答案
按热度按时间xfb7svmp1#
你需要一个条件聚合来得到想要的结果-
Demo.
s3fp2yjn2#
条件聚合,是的-但最有可能 * 不同 * 聚合(比Ankit建议的),我相信-
sum
而不是max
。对于您发布的示例数据,这真的不重要,但可能有更多的行,甚至可能是同一日期,所以max
不会返回正确的结果。考虑在
case
表达式中使用else 0
,而不是NVL
函数(使用Ankit)。此外,您不应该(也可能没有)使用保留字命名列;
date
是为数据类型保留的,所以要么列名不是数据类型,要么用双引号将列名括起来(这通常是个坏主意)。尽管可以在同一条
select
语句中执行此操作,但使用子查询或CTE(如我的示例所示)是一个 * 更简洁 * 的选择;结果将是一样的,但这更容易阅读。样本数据:
质询:
rkkpypqq3#
您可以使用PIVOT获得预期结果:
...