2

私が受け取る結果:

id   sku           name                                                              GROUP_CONCAT(quantity_received)                                                                                                            GROUP_CONCAT(item_cost)                                      
4   00004   Antibacterial Wipes     50,14,25,309,50,14,25,309,50,14,25,309,50,14,25,309,50,14,25,309,50,14,25,309,50,14,25,309,50,14,25,309,50,14,25,309    3.29,3.29,3.29,3.49,3.29,3.29,3.29,3.49,3.29,3.29,3.29,3.49,3.29,3.29,3.29,3.49,3.29,3.29,3.29,3.49,3.29,3.29,3.29,3.49,3.29,3.29,3.29,3.49,3.29,3.29,3.29,3.49,3.29,3.29,3.29,3.49

私が望む結果:

id   sku            name        GROUP_CONCAT(DISTINCT quantity_received)    GROUP_CONCAT(DISTINCT item_cost)
4   00004   Antibacterial Wipes             50,14,25,309                            3.29,3.49

この問題を解決する方法は、quantity_recieved 選択に DISTINCT を配置することでした。問題は、数量に 50、50、14、25 などの同じ 2 つの値がある場合です。結果は 50、14、25 になります。繰り返しの数字を取り除き、値を 1 回だけ取得したいだけです。 .

クエリは次のとおりです。

SELECT `product`.`id`,`product`.`sku`,`product`.`name`,
    case when coalesce(stock1.`quantity`, '') = '' 
        then '0' 
        else stock1.`quantity` 
    end as qty_warehouse,
    case when coalesce(sum(distinct stock2.`quantity`), '') = '' 
        then '0' 
        else sum(distinct stock2.`quantity`) 
    end as qty_events,
    case when coalesce(stock1.`quantity`, '') = '' 
        then '0' 
        else stock1.`quantity` 
    end + 
    case when coalesce(sum(distinct stock2.`quantity`), '') = '' 
        then '0' 
        else sum(distinct stock2.`quantity`) 
    end as qty_total
GROUP_CONCAT(DISTINCT quantity_received) ,
GROUP_CONCAT(DISTINCT item_cost)
FROM (`product`)
LEFT JOIN`shipping_event` 
    ON `shipping_event`.`product_id` = `product`.`id`
LEFT JOIN `product_stock` as stock1 
    ON `product`.`id` = `stock1`.`product_id` and `stock1`.`location_id` = 112 
LEFT JOIN `product_stock` as stock2 
    ON `product`.`id` = `stock2`.`product_id` and `stock2`.`location_id` != 112  
LEFT JOIN `shipping_list` 
    ON `shipping_event`.`shipping_list_id` = `shipping_list`.`id` 
WHERE `shipping_list`.`type` = 'incoming' 
    AND `shipping_event`.`end_date` > '2004-01-01 01:01:01' 
GROUP BY `product`.`id` 
ORDER BY `sku` asc LIMIT 20

この場合、結果を表示するためだけに group concat を使用しています。私は実際に quantity_received を合計してから、それらにアイテムのコストを掛けます。

4

1 に答える 1