Concat 2 запроса в MySQL для отчета об инвентаризации - PullRequest
0 голосов
/ 02 мая 2018

У меня есть 2 запроса в моем sql:

Запрос 1

SELECT
    product_id, 
    product_name, 
    SUM(case when type = "I" then quantity else 0 end) as import, 
    SUM(case when type = "O" then quantity else 0 end) as export, 
    SUM(case when type = "R" then quantity else 0 end) as refund, 
    (
        SUM(case when type = "R" then quantity else 0 end)
        - SUM(case when type = "O" then quantity else 0 end)
        +SUM(case when type = "I" then quantity else 0 end)
    ) as available

FROM
    `i1ntl_ldn_soft_inventory_detail`
WHERE 
    product_id = 2772 
    and date(refdate) < "2018-03-09" 
    and date(refdate)>= "2018-03-01"
GROUP by 
    product_id
ORDER BY 
    `import` DESC

Результат

enter image description here

Запрос 2

SELECT 
    product_id, 
    product_name, 
    (
        SUM(case when type = "R" then quantity else 0 end) 
        - SUM(case when type = "O" then quantity else 0 end)
        +SUM(case when type = "I" then quantity else 0 end)
    ) as available_start
FROM
    `i1ntl_ldn_soft_inventory_detail` 
WHERE 
    product_id = 2772 
    and date(refdate) < "2018-03-01"
GROUP by
    product_id

Результат:

enter image description here

Можно ли объединить 2 этих запроса в 1, чтобы получить результат

Product_id, product_name, available_start, import, export, refund, available

1 Ответ

0 голосов
/ 02 мая 2018

Используйте условное агрегирование и переместите проверку на refdate в выражения CASE. Затем вы можете использовать один запрос.

SELECT
    product_id,
    product_name,
    SUM(CASE WHEN type = 'I' AND DATE(refdate) >= '2018-03-01' AND
             DATE(refdate) < '2018-03-09' THEN quantity ELSE 0 END) AS import,
    SUM(CASE WHEN type = 'O' AND DATE(refdate) >= '2018-03-01' AND
             DATE(refdate) < '2018-03-09' THEN quantity ELSE 0 END) AS export,
    SUM(CASE WHEN type = 'R' AND DATE(refdate) >= '2018-03-01' AND
             DATE(refdate) < '2018-03-09' THEN quantity ELSE 0 END) AS refund,
    SUM(CASE WHEN type IN ('R', 'I') AND DATE(refdate) >= '2018-03-01' AND
             DATE(refdate) < '2018-03-09' THEN quantity ELSE 0 END) -
        SUM(CASE WHEN type = 'O' AND DATE(refdate) >= '2018-03-01' AND
                 DATE(refdate) < '2018-03-09' THEN quantity ELSE 0 END) AS available,
    SUM(CASE WHEN type IN ('R', 'I') AND DATE(refdate) < '2018-03-01'
             THEN quantity ELSE 0 END) -
        SUM(CASE WHEN type = 'O' AND DATE(refdate) < '2018-03-01'
                 THEN quantity ELSE 0 END) AS available_start
FROM i1ntl_ldn_soft_inventory_detail
WHERE product_id = 2772
GROUP by product_id
ORDER BY import DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...