7. 4plan~

hehe~the task has began ,with elite:)

today plan

1.business ,reading code 

2. bbs struts learning

3.a desiring analyse report~

SELECT COALESCE(T8.PROJECT_NO, T1.PROJECT_NO) AS PROJECT_NO, COALESCE(T8.PIPE_NO, T1.PIPE_NO) AS PIPE_NO, COALESCE(T8.PIPE_VERSION, T1.PIPE_VERSION) AS PIPE_VERSION, COALESCE(T8.IS_TOP_VERSION, T3.IS_TOP_VERSION) AS IS_TOP_VERSION, COALESCE(T8.IS_DELETE, T3.IS_DELETE) AS IS_DELETE, COALESCE(T8.IS_PAUSE, T3.IS_PAUSE) AS IS_PAUSE, T3.WEIGHT, T3.INCH, T4.WORK_SPACE_NO cutPlanWorkSpaceNo, T5.WORK_SPACE_NO assyPlanWorkSpaceNo, T6.WORK_SPACE_NO weldingPlanWorkSpaceNo, COALESCE(T8.CUT_PLAN_DATE, T1.CUT_PLAN_DATE) AS CUT_PLAN_DATE, COALESCE(T8.ASSY_PLAN_DATE, T1.ASSY_PLAN_DATE) AS ASSY_PLAN_DATE, COALESCE(T8.WELDING_PLAN_DATE, T1.WELDING_PLAN_DATE) AS WELDING_PLAN_DATE, COALESCE(T8.WELDING_PRE_INSP_PLAN_DATE, T1.WELDING_PRE_INSP_PLAN_DATE) AS WELDING_PRE_INSP_PLAN_DATE, COALESCE(T8.WELDING_POST_INSP_PLAN_DATE, T1.WELDING_POST_INSP_PLAN_DATE) AS WELDING_POST_INSP_PLAN_DATE, COALESCE(T8.IN_BASKET_PLAN_DATE, T1.IN_BASKET_PLAN_DATE) AS IN_BASKET_PLAN_DATE, T7.INST_NEED_DATE, T7.CRAFT_LINE_TYPE, (COALESCE(T8.IN_BASKET_PLAN_DATE, T1.IN_BASKET_PLAN_DATE) - COALESCE(T8.CUT_PLAN_DATE, T1.CUT_PLAN_DATE)) AS PIPE_PRE_CYC FROM CP_PIPE_PLAN_DESP T1 LEFT JOIN CP_PIPE_PLAN T2 ON T1.PLAN_NO = T2.PLAN_NO AND T1.PLAN_VERSION = T2.PLAN_VERSION AND T1.PROJECT_NO = T2.PROJECT_NO AND T2.PLAN_TYPE = '预制' LEFT JOIN CP_PIPE_DESIGN_INFO T3 ON T1.PROJECT_NO = T3.PROJECT_NO AND T1.PIPE_NO = T3.PIPE_NO AND T1.PIPE_VERSION = T3.PIPE_VERSION LEFT JOIN CP_PIPE_PROD_INFO T7 ON T3.PROJECT_NO = T7.PROJECT_NO AND T3.PIPE_NO = T7.PIPE_NO AND T3.PIPE_VERSION = T7.PIPE_VERSION LEFT JOIN CP_WORK_SPACE T4 ON T1.CUT_WORK_SPACE_ID = T4.ID LEFT JOIN CP_WORK_SPACE T5 ON T1.ASSY_WORK_SPACE_ID = T5.ID LEFT JOIN CP_WORK_SPACE T6 ON T1.WELDING_WORK_SPACE_ID = T6.ID LEFT JOIN CP_PIPE_PLAN_ADD_ITEM_EDIT_TEMP T8 ON T1.PLAN_NO = T8.PLAN_NO AND T1.PLAN_VERSION = T8.PLAN_VERSION AND T1.PROJECT_NO = T8.PROJECT_NO AND T1.PIPE_NO = T8.PIPE_NO AND T1.PIPE_VERSION = T8.PIPE_VERSION WHERE T1.PLAN_NO = 'YPH614202511' AND T1.PLAN_VERSION = 6 AND T1.PROJECT_NO = 'H614' AND T2.ORG_NO = 'C000030' UNION ALL SELECT T1.PROJECT_NO, T1.PIPE_NO, T1.PIPE_VERSION, T1.IS_TOP_VERSION, T1.IS_DELETE, T1.IS_PAUSE, T3.WEIGHT, T3.INCH, T4.WORK_SPACE_NO AS cutPlanWorkSpaceNo, T5.WORK_SPACE_NO AS assyPlanWorkSpaceNo, T6.WORK_SPACE_NO AS weldingPlanWorkSpaceNo, T1.CUT_PLAN_DATE, T1.ASSY_PLAN_DATE, T1.WELDING_PLAN_DATE, T1.WELDING_PRE_INSP_PLAN_DATE, T1.WELDING_POST_INSP_PLAN_DATE, T1.IN_BASKET_PLAN_DATE, T7.INST_NEED_DATE AS needDate, T7.CRAFT_LINE_TYPE, (T1.IN_BASKET_PLAN_DATE - T1.CUT_PLAN_DATE) AS PIPE_PRE_CYC FROM CP_PIPE_PLAN_ADD_ITEM_EDIT_TEMP T1 LEFT JOIN CP_PIPE_PLAN T2 ON T1.PLAN_NO = T2.PLAN_NO AND T1.PLAN_VERSION = T2.PLAN_VERSION AND T1.PROJECT_NO = T2.PROJECT_NO AND T2.PLAN_TYPE = '预制' LEFT JOIN CP_PIPE_DESIGN_INFO T3 ON T1.PROJECT_NO = T3.PROJECT_NO AND T1.PIPE_NO = T3.PIPE_NO AND T1.PIPE_VERSION = T3.PIPE_VERSION LEFT JOIN CP_PIPE_PROD_INFO T7 ON T3.PROJECT_NO = T7.PROJECT_NO AND T3.PIPE_NO = T7.PIPE_NO AND T3.PIPE_VERSION = T7.PIPE_VERSION LEFT JOIN CP_WORK_SPACE T4 ON T1.CUT_WORK_SPACE_ID = T4.ID LEFT JOIN CP_WORK_SPACE T5 ON T1.ASSY_WORK_SPACE_ID = T5.ID LEFT JOIN CP_WORK_SPACE T6 ON T1.WELDING_WORK_SPACE_ID = T6.ID WHERE NOT EXISTS (SELECT 1 FROM CP_PIPE_PLAN_DESP T1 WHERE T1.PLAN_NO = T1.PLAN_NO AND T1.PLAN_VERSION = T1.PLAN_VERSION AND T1.PROJECT_NO = T1.PROJECT_NO AND T1.PIPE_NO = T1.PIPE_NO AND T1.PIPE_VERSION = T1.PIPE_VERSION) AND T1.PLAN_NO = 'YPH614202511' AND T1.PLAN_VERSION = 6 AND T1.PROJECT_NO = 'H614' ORDER BY T1.ASSY_PLAN_DATE DESC; order by有问题
10-28
你提供的 SQL 查询中,`ORDER BY` 子句放在 `UNION ALL` 之后,是合法的,但当前写法存在问题: ```sql ORDER BY T1.ASSY_PLAN_DATE DESC; ``` ### ❌ 问题原因: - 在 `UNION ALL` 查询中,`ORDER BY` 只能引用最终结果集的列名,而不能引用来自某个子查询的别名(如 `T1.ASSY_PLAN_DATE`)。 - 因为 `UNION ALL` 后的两个查询结果合并成一个结果集,此时 `T1` 这个别名已经不存在了,数据库无法识别 `T1.ASSY_PLAN_DATE`。 --- ### ✅ 正确写法: 你需要使用列的别名(即 `SELECT` 中定义的 `AS` 名称)或列的序号来排序。 #### ✅ 方法一:使用列别名排序(推荐) ```sql ORDER BY ASSY_PLAN_DATE DESC ``` #### ✅ 方法二:使用列序号排序(不推荐,维护性差) ```sql ORDER BY 12 DESC -- 假设 ASSY_PLAN_DATE 是第12个字段 ``` --- ### ✅ 修改后的完整 SQL 示例: ```sql ( SELECT COALESCE(T8.PROJECT_NO, T1.PROJECT_NO) AS PROJECT_NO, COALESCE(T8.PIPE_NO, T1.PIPE_NO) AS PIPE_NO, COALESCE(T8.PIPE_VERSION, T1.PIPE_VERSION) AS PIPE_VERSION, COALESCE(T8.IS_TOP_VERSION, T3.IS_TOP_VERSION) AS IS_TOP_VERSION, COALESCE(T8.IS_DELETE, T3.IS_DELETE) AS IS_DELETE, COALESCE(T8.IS_PAUSE, T3.IS_PAUSE) AS IS_PAUSE, T3.WEIGHT, T3.INCH, T4.WORK_SPACE_NO AS cutPlanWorkSpaceNo, T5.WORK_SPACE_NO AS assyPlanWorkSpaceNo, T6.WORK_SPACE_NO AS weldingPlanWorkSpaceNo, COALESCE(T8.CUT_PLAN_DATE, T1.CUT_PLAN_DATE) AS CUT_PLAN_DATE, COALESCE(T8.ASSY_PLAN_DATE, T1.ASSY_PLAN_DATE) AS ASSY_PLAN_DATE, COALESCE(T8.WELDING_PLAN_DATE, T1.WELDING_PLAN_DATE) AS WELDING_PLAN_DATE, COALESCE(T8.WELDING_PRE_INSP_PLAN_DATE, T1.WELDING_PRE_INSP_PLAN_DATE) AS WELDING_PRE_INSP_PLAN_DATE, COALESCE(T8.WELDING_POST_INSP_PLAN_DATE, T1.WELDING_POST_INSP_PLAN_DATE) AS WELDING_POST_INSP_PLAN_DATE, COALESCE(T8.IN_BASKET_PLAN_DATE, T1.IN_BASKET_PLAN_DATE) AS IN_BASKET_PLAN_DATE, T7.INST_NEED_DATE, T7.CRAFT_LINE_TYPE, (COALESCE(T8.IN_BASKET_PLAN_DATE, T1.IN_BASKET_PLAN_DATE) - COALESCE(T8.CUT_PLAN_DATE, T1.CUT_PLAN_DATE)) AS PIPE_PRE_CYC FROM CP_PIPE_PLAN_DESP T1 LEFT JOIN CP_PIPE_PLAN T2 ON T1.PLAN_NO = T2.PLAN_NO AND T1.PLAN_VERSION = T2.PLAN_VERSION AND T1.PROJECT_NO = T2.PROJECT_NO AND T2.PLAN_TYPE = '预制' LEFT JOIN CP_PIPE_DESIGN_INFO T3 ON T1.PROJECT_NO = T3.PROJECT_NO AND T1.PIPE_NO = T3.PIPE_NO AND T1.PIPE_VERSION = T3.PIPE_VERSION LEFT JOIN CP_PIPE_PROD_INFO T7 ON T3.PROJECT_NO = T7.PROJECT_NO AND T3.PIPE_NO = T7.PIPE_NO AND T3.PIPE_VERSION = T7.PIPE_VERSION LEFT JOIN CP_WORK_SPACE T4 ON T1.CUT_WORK_SPACE_ID = T4.ID LEFT JOIN CP_WORK_SPACE T5 ON T1.ASSY_WORK_SPACE_ID = T5.ID LEFT JOIN CP_WORK_SPACE T6 ON T1.WELDING_WORK_SPACE_ID = T6.ID LEFT JOIN CP_PIPE_PLAN_ADD_ITEM_EDIT_TEMP T8 ON T1.PLAN_NO = T8.PLAN_NO AND T1.PLAN_VERSION = T8.PLAN_VERSION AND T1.PROJECT_NO = T8.PROJECT_NO AND T1.PIPE_NO = T8.PIPE_NO AND T1.PIPE_VERSION = T8.PIPE_VERSION WHERE T1.PLAN_NO = 'YPH614202511' AND T1.PLAN_VERSION = 6 AND T1.PROJECT_NO = 'H614' AND T2.ORG_NO = 'C000030' ) UNION ALL ( SELECT T1.PROJECT_NO, T1.PIPE_NO, T1.PIPE_VERSION, T1.IS_TOP_VERSION, T1.IS_DELETE, T1.IS_PAUSE, T3.WEIGHT, T3.INCH, T4.WORK_SPACE_NO AS cutPlanWorkSpaceNo, T5.WORK_SPACE_NO AS assyPlanWorkSpaceNo, T6.WORK_SPACE_NO AS weldingPlanWorkSpaceNo, T1.CUT_PLAN_DATE, T1.ASSY_PLAN_DATE, T1.WELDING_PLAN_DATE, T1.WELDING_PRE_INSP_PLAN_DATE, T1.WELDING_POST_INSP_PLAN_DATE, T1.IN_BASKET_PLAN_DATE, T7.INST_NEED_DATE AS needDate, T7.CRAFT_LINE_TYPE, (T1.IN_BASKET_PLAN_DATE - T1.CUT_PLAN_DATE) AS PIPE_PRE_CYC FROM CP_PIPE_PLAN_ADD_ITEM_EDIT_TEMP T1 LEFT JOIN CP_PIPE_PLAN T2 ON T1.PLAN_NO = T2.PLAN_NO AND T1.PLAN_VERSION = T2.PLAN_VERSION AND T1.PROJECT_NO = T2.PROJECT_NO AND T2.PLAN_TYPE = '预制' LEFT JOIN CP_PIPE_DESIGN_INFO T3 ON T1.PROJECT_NO = T3.PROJECT_NO AND T1.PIPE_NO = T3.PIPE_NO AND T1.PIPE_VERSION = T3.PIPE_VERSION LEFT JOIN CP_PIPE_PROD_INFO T7 ON T3.PROJECT_NO = T7.PROJECT_NO AND T3.PIPE_NO = T7.PIPE_NO AND T3.PIPE_VERSION = T7.PIPE_VERSION LEFT JOIN CP_WORK_SPACE T4 ON T1.CUT_WORK_SPACE_ID = T4.ID LEFT JOIN CP_WORK_SPACE T5 ON T1.ASSY_WORK_SPACE_ID = T5.ID LEFT JOIN CP_WORK_SPACE T6 ON T1.WELDING_WORK_SPACE_ID = T6.ID WHERE NOT EXISTS ( SELECT 1 FROM CP_PIPE_PLAN_DESP T1 WHERE T1.PLAN_NO = T1.PLAN_NO AND T1.PLAN_VERSION = T1.PLAN_VERSION AND T1.PROJECT_NO = T1.PROJECT_NO AND T1.PIPE_NO = T1.PIPE_NO AND T1.PIPE_VERSION = T1.PIPE_VERSION ) AND T1.PLAN_NO = 'YPH614202511' AND T1.PLAN_VERSION = 6 AND T1.PROJECT_NO = 'H614' ) ORDER BY ASSY_PLAN_DATE DESC; ``` --- ### ✅ 总结: | 问题 | 解决方案 | |------|----------| | `ORDER BY T1.ASSY_PLAN_DATE` 报错 | 改为 `ORDER BY ASSY_PLAN_DATE` | | `UNION ALL` 后排序问题 | 使用列别名或列序号排序 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值