如何编写SQL查询创建损失类型A、损失类型B对应的金额列
实现方案
这个需求是典型的按字段条件做列拆分场景,使用标准SQL的CASE条件表达式即可实现,兼容所有主流关系型数据库(MySQL、PostgreSQL、SQL Server、Oracle等)。
通用SQL写法
注意原始数据中LOSSTYPE字段存储的值带末尾点(A./B.),判断条件需要和实际存储值匹配:
SELECT Name, CASE WHEN LOSSTYPE = 'A.' THEN LOSSAMT ELSE 0 END AS `Losstype A amt`, CASE WHEN LOSSTYPE = 'B.' THEN LOSSAMT ELSE 0 END AS `LOSSTYPE B amt` FROM 替换为你的实际表名;
数据库专属简化写法(MySQL环境)
如果使用MySQL,也可以用IF函数写得更简洁,执行效果完全一致:
SELECT Name, IF(LOSSTYPE = 'A.', LOSSAMT, 0) AS `Losstype A amt`, IF(LOSSTYPE = 'B.', LOSSAMT, 0) AS `LOSSTYPE B amt` FROM 替换为你的实际表名;
注意事项
- 如果你的表中
LOSSTYPE实际存储值不带末尾的点(即存的是A/B而非A./B.),把条件判断里的字符串对应修改即可 - 如果
LOSSAMT是字符串类型、值末尾带点,需要先做格式转换再取值,可以把语句里的LOSSAMT替换为CAST(TRIM(TRAILING '.' FROM LOSSAMT) AS DECIMAL(12,2)),金额为数值类型时无需额外处理 - 后续如果需要新增其他损失类型的拆分列,按照相同的条件判断逻辑新增对应列即可
内容的提问来源于stack exchange,提问作者Akash Joshi
相关产品推荐
相关产品推荐

