SELECT b.ID, b.audit_code, b.project_id, b.flow_end_date businessClosedDate, P.outterbalance_money, P.project_code, P.project_name, 'ZC' closeTypeCode, b.flow_status FROM pms_pm_project_business_close b LEFT JOIN pms_pm_prj_base P ON P.ID = b.project_id LEFT JOIN pms_CONTRACT_PORJECT_RELATION C ON P.ID = C.eps_id AND C.status = 0 WHERE b.status = 0 AND P.status = 0 AND C.contract_id ='CA0B8794AD700001B77A87201855D970' UNION SELECT b.ID, b.audit_code, b.project_id, b.business_close_date businessClosedDate, P.outterbalance_money, P.project_code, P.project_name, 'YC' closeTypeCode, CASE WHEN b.flow_status = 2 THEN '流程结束' WHEN b.flow_status = 1 THEN '审批中' ELSE'拟稿' END flow_status FROM pms_pm_project_unusual_close b LEFT JOIN pms_pm_prj_base P ON P.ID = b.project_id LEFT JOIN pms_CONTRACT_PORJECT_RELATION C ON P.ID = C.eps_id AND C.status = 0 WHERE b.status = 0 AND b.IS_BUSINESS_CLOSE_CODE = '1' AND P.status = 0 AND C.contract_id ='CA0B8794AD700001B77A87201855D970' 解决这段sql的问题 UNION types numeric and text cannot be matched
时间: 2024-04-11 17:33:56 浏览: 116
server_audit.so
这个错误通常是由于两个 SELECT 语句的列数据类型不匹配导致的。在 UNION 操作中,两个 SELECT 语句的列列表必须具有相同的数据类型或可以进行隐式转换。
根据您提供的 SQL 查询语句,我注意到在第一个 SELECT 子句中,'ZC' 被用作 closeTypeCode 的值。而在第二个 SELECT 子句中,使用了一个 CASE 表达式来确定 flow_status 的值。
请确保 closeTypeCode 和 flow_status 的数据类型相匹配,以便在 UNION 操作中正确匹配列。如果 closeTypeCode 的数据类型为文本类型(varchar、text),您可以将 flow_status 的值转换为文本类型,例如将数字 2 转换为字符串 '2'。
例如,您可以尝试修改第二个 SELECT 子句的 CASE 表达式如下:
```sql
CASE
WHEN b.flow_status = 2 THEN '流程结束'
WHEN b.flow_status = 1 THEN '审批中'
ELSE '拟稿'
END AS flow_status
```
通过添加 `AS flow_status`,确保 flow_status 是一个别名,并且与第一个 SELECT 子句中的列名相匹配。
请尝试修改查询并检查列数据类型是否匹配,这样就可以解决 UNION types numeric and text cannot be matched 的问题。如果您有其他问题,请随时提问!
阅读全文