我真的不明白您为什么要尝试在一个查询中执行此操作。
如果您想获取每个任务类型(tasks_type 列)的周期时间(task_cycle_time_hr 列),只需在循环中查询每个可能的 tasks_type 值。如果您不知道这些先验,请查询任务类型值查询返回的每个值,这看起来像
for (String taskType : selectFrom(tasks).list(tasks.tasks_type)) {
double cycleTime = (double) selectFrom(tasks)
.where(db_table.tasks_type.eq(taskType))
.firstResult(tasks.task_cycle_time_hr);
traceln("Task type " + taskType + ", cycle time " + cycleTime);
}
但这只是查询所有行并从每个行读取任务类型和周期时间值,因此您通常不会这样做:您只会有一个查询循环遍历所有完整行。 ..
List<Tuple> rows = selectFrom(tasks).list();
for (Tuple row : rows) {
traceln("Task type " +
row.get(tasks.tasks_type) + ", cycle time " +
row.get(tasks.task_cycle_time_hr));
}
NB:我假设您没有任何包含重复任务类型的行,因为这样整个练习就没有意义,除非您只想要 first 行每个任务类型的值,或者想要每个给定任务类型的循环时间值的某种聚合(例如,总和)。您正在尝试使用uniqueResult,这可能意味着如果恰好有一行(对于给定的任务类型)并且“否则没有结果”,则您想要获取一个值,但uniqueResult 如果存在则抛出异常(错误)不完全是一排(所以你不能像那样直接使用它)。在那种情况下,一种方法(还有其他方法,有些可能稍微好一点)是先进行计数以进行检查;例如像
for (String taskType : selectFrom(tasks).list(tasks.tasks_type)) {
int rowCount = (int) selectFrom(tasks)
.where(db_table.task.eq(taskType))
.count();
if (rowCount == 1) {
double cycleTime = (double) selectFrom(tasks)
.where(db_table.tasks_type.eq(taskType))
.firstResult(tasks.task_cycle_time_hr);
traceln("Task type " + taskType + ", unique cycle time " + cycleTime);
}
}