diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java index 0a8875989f..702e6e33ec 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java @@ -1099,18 +1099,21 @@ public class PhysicalPlanTranslator extends DefaultPlanVisitor slotList, List orderKeyList, PlanTranslatorContext context, Table table) { TupleDescriptor tupleDescriptor = context.generateTupleDesc(); - tupleDescriptor.setTable(table); Set alreadyExists = Sets.newHashSet(); + tupleDescriptor.setTable(table); for (OrderKey orderKey : orderKeyList) { + SlotReference slotReference; if (orderKey.getExpr() instanceof SlotReference) { - SlotReference slotReference = (SlotReference) orderKey.getExpr(); - // TODO: trick here, we need semanticEquals to remove redundant expression - if (alreadyExists.contains(slotReference.getExprId())) { - continue; - } - context.createSlotDesc(tupleDescriptor, (SlotReference) orderKey.getExpr()); - alreadyExists.add(slotReference.getExprId()); + slotReference = (SlotReference) orderKey.getExpr(); + } else { + slotReference = (SlotReference) new Alias(orderKey.getExpr(), orderKey.getExpr().toString()).toSlot(); } + // TODO: trick here, we need semanticEquals to remove redundant expression + if (alreadyExists.contains(slotReference.getExprId())) { + continue; + } + context.createSlotDesc(tupleDescriptor, slotReference); + alreadyExists.add(slotReference.getExprId()); } for (Slot slot : slotList) { if (alreadyExists.contains(slot.getExprId())) {