我正在sql server中使用cakephp中的selectquery和groupby生成一个报告

qxsslcnc  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(222)

我使用selectquery和used group从orderproduct中选择sum。在本地的mysql服务器上,但在sql服务器上。在本地中没有错误,但在服务器中有错误:
2020-07-24 10:21:35错误:[pdoexception]sqlstate[42000]:[microsoft][odbc driver 17 for sql server][sql server]列“products.product\u name”在选择列表中无效,因为它不包含在聚合函数或group by子句中。
我的控制器代码是:

$getQuery = $this->OrderProduct
    ->find('all', [
        'contain' => [
            'Orders' => ['PaymentMethods'],
            'Products' => ['ProductType']
        ]
    ])
    ->select([
        'product_name' => 'Products.product_name',
        'count' => 'SUM(OrderProduct.qty)',
        'actual_rate' => 'SUM(OrderProduct.actual_rate)',
        'order_date' => 'Orders.order_date',
        'payment_gateway' => 'PaymentMethods.payment_gateway'
    ])
    ->where($conditions);

$getQuery->where([
    'Products.is_deleted' => 'n'
]); 

$getQuery->matching('Products.ProductType');
$getQuery->where([
    'ProductType.slug' => $searchparams['product_type_id']
]);

$getQuery->where([
    'Orders.order_status NOT IN' => ['payment_pending']
]);

$getAll = $getQuery->group('OrderProduct.product_id');
n3ipq98p

n3ipq98p1#

您的查询使用“orderproduct”中的“product\u id”字段进行分组,因此您必须指定哪些值应该从未分组的字段返回。
您将使用聚合函数执行此操作,如错误消息所示:

MIN, MAX, SUM

因此,您可以更改代码以获得最大值:

MAX(Products.product_name)

或将组更改为:

Products.id

相关问题