只是不明白为什么我必须聚合每一个表列只是为了让SQL SERVER看起来相反。这很难理解。我为什么要这样做:
$this->db->select("MAX(c.id),MAX(c.name),MAX(c.phone)");
$this->db->select('MAX(state.name) as st_nm');
$this->db->select('MAX(lga.name) as "lga_nm"');
$this->db->select('MAX(cp2.point_name),MAX(cp2.location)');
$this->db->select('SUM(pr.amount) as "amt"');
$this->db->from('consultant as c');
$this->db->join('state','state.id=c.state','inner');
$this->db->join('lga','lga.id=c.lga','inner');
$this->db->join('collection_point2 as cp2','cp2.point_code=c.collection_point','inner');
$this->db->join('payment_records as pr','pr.consultant_id=c.unique_id','inner');
$this->db->where('c.agent_id',$agent);
$this->db->group_by('c.id');
$this->db->order_by('c.id');
为了避免这种情况:
Msg 8120, Level 16, State 1, Line 1 Column ... is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
答案 0 :(得分:0)
我知道,你总会遇到这样的情况:你脑子里会有同样的问题。为什么所有列都需要它?
您的选择:
将您的聚合逻辑分开,不要在一个查询中抛出所有列。所以说,只让一个查询从顾问和&amp ;;中回报你" c.id,SUM(pr.amount)。付款记录"。
使用上表连接其他表(state,lga,consultant),并且此查询的任何列都不需要聚合。
我建议比较这些查询的性能时间,并根据性能决定。
推理:这就是"分组的方式。条款设计。虽然实际情况会拖延开发人员构建如此荒谬的查询,其中聚合应用于每一列只是为了使其吐出所需的数据。