Задать вопрос
@up7

Как выгрузить group_concat-ом перечень id?

Есть сложный SQL-запрос

SELECT CASE WHEN p.productid != '' THEN p.productname WHEN l.licenseid != '' THEN l.name ELSE s.servicename END AS productname,
		CASE WHEN p.productid != '' THEN 'product' WHEN l.licenseid != '' THEN 'license' ELSE 'service' END AS type,
		SUM(inv.quantity) AS quantity, SUM(inv.quantity*inv.listprice*(1-COALESCE(inv.discount_percent, 0)/100)-COALESCE(inv.discount_amount, 0)) AS subtotal
		FROM vtiger_sp_act a 
		INNER JOIN vtiger_crmentity e ON e.crmid = a.actid
		INNER JOIN vtiger_inventoryproductrel inv ON inv.id = a.actid 
		LEFT JOIN vtiger_products p ON p.productid = inv.productid 
		LEFT JOIN vtiger_service s ON s.serviceid = inv.productid 
		LEFT JOIN vtiger_license l ON l.licenseid = inv.productid
		WHERE e.deleted = False AND actdate BETWEEN '$from_date' AND '$to_date' AND a.branch_or_agent IN ($branches)
		GROUP BY 1, 2


Каким образом в результат добавить еще (агрегировать) id актов - поле actid из таблицы vtiger_sp_act.

Что-то вообще не понимаю, какие образом применить сюда group_concat.
  • Вопрос задан
  • 60 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
WStanley
@WStanley
Back-end Developer
В select добавить
GROUP_CONCAT(A.ACTID)

SELECT
    CASE WHEN P.PRODUCTID !=  '' THEN P.PRODUCTNAME WHEN L.LICENSEID !=  '' THEN L.NAME ELSE S.SERVICENAME END AS  PRODUCTNAME
,   CASE WHEN P.PRODUCTID !=  '' THEN 'product' WHEN L.LICENSEID !=  '' THEN 'license' ELSE 'service' END      AS  TYPE
,   SUM(INV.QUANTITY)                                                                                          AS  QUANTITY
,   SUM(INV.QUANTITY*INV.LISTPRICE*(1-COALESCE(INV.DISCOUNT_PERCENT, 0)/100)-COALESCE(INV.DISCOUNT_AMOUNT, 0))  AS  SUBTOTAL
,   GROUP_CONCAT(A.ACTID)
FROM
    VTIGER_SP_ACT   A
INNER JOIN
    VTIGER_CRMENTITY    E
ON
    E.CRMID =   A.ACTID
INNER JOIN
    VTIGER_INVENTORYPRODUCTREL  INV
ON
    INV.ID  =   A.ACTID
LEFT JOIN
    VTIGER_PRODUCTS P
ON
    P.PRODUCTID =   INV.PRODUCTID
LEFT JOIN
    VTIGER_SERVICE  S
ON
    S.SERVICEID =   INV.PRODUCTID
LEFT JOIN
    VTIGER_LICENSE  L
ON
    L.LICENSEID =   INV.PRODUCTID
WHERE
    E.DELETED           =       FALSE
AND ACTDATE             BETWEEN '$from_date'    AND '$to_date'
AND A.BRANCH_OR_AGENT   IN      ($branches)
GROUP BY
    1
,   2
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы