单SQL语句实现多组核销列统一查询与结果合并
用单条SQL合并多组核销记录查询
嘿,这个场景太常见了!你现在的表结构是把多笔核销数据横向存在同一行里,要一次性筛选出所有WOCODE包含'Warehouse'的记录,完全可以用UNION ALL来把四组数据纵向合并,不用再手动跑四次查询复制粘贴啦。
核心思路
把每组核销字段当成独立的数据源,分别筛选符合条件的记录,再用UNION ALL把结果拼接成一个统一的结果集。这样既保留了所有符合条件的记录,又能一次完成查询。
完整SQL示例
假设你的表名叫claim_records,替换成你实际的表名就行:
-- 第一组核销数据 SELECT WOCLAIMNO1 AS claim_no, WOAMT1 AS amount, WOCODE1 AS code FROM claim_records WHERE WOCODE1 LIKE '%Warehouse%' -- 合并第二组 UNION ALL SELECT WOCLAIMNO2 AS claim_no, WOAMT2 AS amount, WOCODE2 AS code FROM claim_records WHERE WOCODE2 LIKE '%Warehouse%' -- 合并第三组 UNION ALL SELECT WOCLAIMNO3 AS claim_no, WOAMT3 AS amount, WOCODE3 AS code FROM claim_records WHERE WOCODE3 LIKE '%Warehouse%' -- 合并第四组 UNION ALL SELECT WOCLAIMNO4 AS claim_no, WOAMT4 AS amount, WOCODE4 AS code FROM claim_records WHERE WOCODE4 LIKE '%Warehouse%';
几个关键注意点
- 用
UNION ALL而不是UNION:UNION会自动去重,但如果你的业务里允许同一核销记录重复出现(或者只是不想丢失任何符合条件的行),UNION ALL效率更高,因为不需要做去重校验。 - 字段类型要匹配:确保四组对应的字段类型一致(比如
WOAMT1到WOAMT4都是数值型,WOCLAIMNO系列都是字符串型),不然会报错。 - 保留原表其他信息:如果需要关联原记录的其他字段(比如主记录ID、索赔日期等),可以在每个
SELECT里加上这些字段,比如:SELECT claim_id, -- 原表的主标识字段 WOCLAIMNO1 AS claim_no, WOAMT1 AS amount, WOCODE1 AS code FROM claim_records WHERE WOCODE1 LIKE '%Warehouse%' -- 其他组同样加上claim_id
这样执行一次就能拿到所有符合条件的核销记录,完美替代多次手动操作~
内容的提问来源于stack exchange,提问作者luckyguy73
相关产品推荐
相关产品推荐

