sql - 根据匹配的非无效记录转换无效记录
问题描述
当某些情况发生时,我必须转换 4 个字段。
必须使用非 VOID(类型 0,2)转换 VOID(类型 = 6)行。每行的事务都是唯一的,VOID 行在 Voidtran 字段中具有原始事务。
这是我的查询:
SELECT CAST(payhist.number AS CHAR) Transaction
,CAST(payhist.descr AS CHAR) TransactionDesc
,CAST(payhist.account AS CHAR) Account
,CAST(payhist.type AS CHAR) Type
,CAST(payhist.voidtran AS CHAR) Voidtran
,CAST(servdef.number AS CHAR) ServDefNum
,CAST(servdef.descr AS CHAR) ServDefDesc
,CAST(LEFT(list_charge.descr,5) AS CHAR) ChargeType
,CAST(list_charge.descr AS CHAR) ChargeTypeDesc
FROM billmax.payhist
LEFT JOIN monthlysale ON monthlysale.payhist = payhist.number
LEFT JOIN servdef ON payhist.servdef = servdef.number
LEFT JOIN lists AS list_charge ON list_charge.value = payhist.charge_type AND list_charge.list='chargetypes'
WHERE payhist.type IN (0,2,6)
AND monthlysale.bookdate BETWEEN '2020-12-01' AND NOW()
AND monthlysale.amount <>0
AND payhist.number IN(9751739,9729411)
我想我需要构建一个 UNION 查询 - 一部分用于类型 0 或 2,一部分用于类型 6,但我不知道如何更改这 4 个字段。非常感谢所有帮助!
解决方案
如果我理解正确,您想在值为 NULL 时“传播”值。这使用COALESCE()
和窗口函数:
SELECT COALESCE(payhist.number, MAX(payhist.number) OVER (PARTITION BY payhist.account)) as Transaction
payhist.descras as TransactionDesc
payhist.account as Account
COALESCE(payhist.type, MAX(payhist.type) OVER (PARTITION BY payhist.account) as Type,
. . .
FROM billmax.payhist JOIN
monthlysale
ON monthlysale.payhist = payhist.number LEFT JOIN
servdef
ON payhist.servdef = servdef.number LEFT JOIN
lists AS list_charge
ON list_charge.value = payhist.charge_type AND list_charge.list = 'chargetypes'
WHERE payhist.type IN (0,2,6) AND
monthlysale.bookdate BETWEEN '2020-12-01' AND NOW() AND
monthlysale.amount <> 0 AND
payhist.number IN (9751739, 9729411) ;
我不知道您为什么要将值转换为字符串(尤其是似乎已经是字符串的值),所以我只是删除了该逻辑。
推荐阅读
- java - 具有接口的多态性和具有抽象类的多态性一样合法吗?
- sql - 运输报告 - 具有两个日期的不同订单 - 表中缺少状态 THEN
- corda - Corda 项目中包含的 2 个 build.gradle 文件有什么区别
- reactjs - 点击打开 react-360 视图
- c# - 使用正则表达式查找终止词
- c++ - 如何确定提取了多少个字符`std::getline()`?
- google-sheets - 在 Google 表格中将列转换为行
- java - 在TRIE实现中,实现节点的有效方法是什么?
- python - 这甚至意味着官方 featuretools 文档中的 SUM(sessions.MIN(transactions.amount)) 是什么意思?
- java - Spring Boot - 分层实体数据未从休息 API 返回