如何解决Oracle SQL-在PIVOT之前更新值
团队-
我有以下代码可以正常工作,并根据需要创建PIVOT表结果集。
SELECT *
FROM
(
SELECT a.APP_AUTOMATIC_NUMBER,a.LETTER_TYPE_ID,TRUNC (EXTRACT_DATE),'Commercial' AS ACCT_TYPE
FROM [TABLE_NAME] a
WHERE EXTRACT_DATE BETWEEN SYSDATE-7 AND SYSDATE -4 AND a.ACTIVE_FLAG ='ACTIVE'
) t
PIVOT(
COUNT(APP_AUTOMATIC_NUMBER)
FOR LETTER_TYPE_ID IN (
1,13,9,'L13')
)
但是,PIVOT表中的值“ L13”应为/可以与其他返回的13一起折叠。基本上13和L13是同一件事。
在我的查询中是否可以用L13到13更新记录?我无权更新源表。但是我在想,必须有一种使用CASE或其他语句在我的代码本身中将L13更新为13的方法。
谢谢
解决方法
我建议使用条件聚合而不是pivot
:它比此特定于供应商的语法灵活得多,并且可以轻松适应您的用例。
select
trunc(extract_date) extract_day,'commercial' as acct_type,count(case when letter_type_id = '1' then app_automatic_number end) app_automatic_number_1,count(case when letter_type_id in ('12','L13') then app_automatic_number end) app_automatic_number_13,count(case when letter_type_id = '9' then app_automatic_number end) app_automatic_number_9
from table_name
where
extract_date between sysdate-7 and sysdate -4
and active_flag = 'active'
group by trunc(extract_date)
注意:
-
除非
app_automatic_number
可以包含null
个值,否则条件表达式最好写成:sum(case when letter_type_id = '1' then 1 else 0 end)
-
此查询始终将
letter_type_id
视为字符串(这就是它的样子)-甚至只有数字的小括号都被单引号引起了;使用适当的数据类型总是比依靠隐式转换更好(并且有时避免违反直觉的行为)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。