2013-06-26 2 views
0

Я использую функцию group_concat для объединения нескольких движений продукта, который уже сделан для правого стола (stockout) с left join. MySQL код цен ниже mysql group_concat для левой и правой таблицы

SELECT 
    p.serialno AS SISN, 
    p.in_quantity AS INQTY, 
    SUM(IFNULL(s.out_quantity, '0')) AS OUTQTY, 
     GROUP_CONCAT(
      CONCAT(
       COALESCE(IFNULL(s.out_quantity,'0'), ''),'|' 
      ) 
     ) details 
FROM stockin p LEFT JOIN stockout s 
    ON p.serialno = s.serialno 
    WHERE p.productid = 'TF00123' 
GROUP BY p.stockin_id, p.serialno, s.serialno 

Выход следующего образом-

+------+-------+--------+--------------------------------+ 
| SISN | INQTY | OUTQTY | details      | 
+------+-------+--------+--------------------------------+ 
| AAA1 | 500 | 740 | 300|,100|,50|,50|,20|,20|,200| | 
| AAA2 | 500 |  0 | 0|        | 
| AAA3 |  1 |  3 | 1|,1|,1|      | 
| AAA3 |  1 |  3 | 1|,1|,1|      | 
| AAA1 | 200 | 740 | 300|,100|,50|,50|,20|,20|,200| | 
| AAA3 |  1 |  3 | 1|,1|,1|      | 
| AAA1 | 100 | 740 | 300|,100|,50|,50|,20|,20|,200| | 
+------+-------+--------+--------------------------------+ 
7 rows in set (0.00 sec) 

Теперь я хочу, чтобы group_concat левых количества таблицы в другой колонке, как детали, если p.serialno такого же. Пожалуйста, проверьте вывод, если я делать с ручным

+------+-------+------------------+--------+--------------------------------+ 
| SISN | INQTY | details   | OUTQTY | details      | 
+------+-------+------------------+--------+--------------------------------+ 
| AAA1 | 800 | 500|,200|,100| | 740 | 300|,100|,50|,50|,20|,20|,200| | 
| AAA2 | 500 | 0|    |  0 | 0|        | 
| AAA3 |  3 | 1|,1|,1|   |  3 | 1|,1|,1|      | 
+------+-------+------------------+--------+--------------------------------+ 
3 rows in set (0.00 sec) 

ответ

0

Просто используйте

GROUP_CONCAT(
      CONCAT(
       COALESCE(IFNULL(p.out_quantity,'0'), ''),'|' 
      ) 
     ) details1 

как этого

SELECT 
    p.serialno AS SISN, 
    p.in_quantity AS INQTY, 
    GROUP_CONCAT(
      CONCAT(
       COALESCE(IFNULL(p.out_quantity,'0'), ''),'|' 
      ) 
     ) details1 
    SUM(IFNULL(s.out_quantity, '0')) AS OUTQTY, 
     GROUP_CONCAT(
      CONCAT(
       COALESCE(IFNULL(s.out_quantity,'0'), ''),'|' 
      ) 
     ) details 
FROM stockin p LEFT JOIN stockout s 
    ON p.serialno = s.serialno 
    WHERE p.productid = 'TF00123' 
GROUP BY p.stockin_id, p.serialno, s.serialno 
+0

спасибо за ваше предложение, я уже завершил этот отчет несколько дней назад ... –