У меня есть SQL результат, который выглядит следующим образом:
+-----------+------------+
| AGENTCODE | DEAL_ID |
+-----------+------------+
| 110434 | SO20001353 |
| 108415 | SO20001344 |
| 106188 | SO20001344 |
| 107689 | SO20001342 |
| 109150 | SO20001340 |
| 109150 | SO20001341 |
+-----------+------------+
Если я группирую по коду агента и рассчитываю deal_id
Я получаю количество сделок на агента,
логически для меня Если в сделке более одного агента, то каждый должен получить 1 / агентов за эту сделку. Это опция для SQL или мне нужно написать программу для этого?
Мой желаемый результат будет выглядеть так:
+-----------+-------+
| AGENTCODE | DELAS |
+-----------+-------+
| 110434 | 1 |
| 108415 | 0.5 |
| 106188 | 0.5 |
| 107689 | 1 |
| 109150 | 2 |
+-----------+-------+
Спасибо.
Текущий код
SELECT d.AGENTCODE,
SUM(c.DEAL_COUNT) AS DEALS
FROM (
SELECT AGENTS.AGENTCODE,
ORDERS.ORD
FROM AGENTS,
BRANCHES,
CPROFTYPES,
ORDERS,
ORDSTATUS,
ORDERITEMS,
TRANSPAYMENT,
TRANSORDER
WHERE ORDERITEMS.EPI_AGENT = AGENTS.AGENT
AND ORDERITEMS.PART = 25 /*5003*/
AND ORDERS.ORD = ORDERITEMS.ORD
AND ORDERS.BRANCH = BRANCHES.BRANCH
AND ORDERS.ORDTYPE = CPROFTYPES.CPROFTYPE
AND TRANSORDER.EPI_PAYDATE BETWEEN 16830720 AND 16917120
AND ORDERS.ORDSTATUS = ORDSTATUS.ORDSTATUS
AND ORDSTATUS.ORDSTATUSDES != 'canceled'
AND TRANSPAYMENT.ORD = ORDERS.ORD
AND TRANSPAYMENT.TRANS = TRANSORDER.TRANS
AND TRANSORDER.EPI_CKPAY = 'Y'
AND TRANSORDER.TRANS != 0
AND NOT EXISTS(SELECT 'X'
FROM TRANSPAYMENT TRP
, TRANSORDER TRS
WHERE TRP.ORD = ORDERS.ORD
AND TRP.TRANS = TRS.TRANS
AND TRS.EPI_PAYDATE
> 16917120
AND TRS.TRANS != 0)
AND CPROFTYPES.TYPECODE IN ('21', '22', '26', '29')
) AS d
CROSS APPLY (SELECT 1.00 / COUNT(*) AS DEAL_COUNT FROM ORDERS WHERE ORD = d.ORD) c
GROUP BY d.AGENTCODE
ORDER BY d.AGENTCODE;