mysql - 在mysql中Concat 2查询库存报告

标签 mysql sql

我的 sql 中有 2 个查询:

查询 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

最佳答案

使用条件聚合,并将对 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

关于mysql - 在mysql中Concat 2查询库存报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50126280/

相关文章:

php - 使用ajax从mysql输出数据

mysql - 通过查询更改 SQL 列标题

mysql - 查找最接近指定日期时间的记录

mysql - 在 mysql 中使用 JOIN 和子查询

MySQL - 从每个月中选择前 100 条记录

sql - sql db2 统计每个id在表中出现的次数

SQL 多重选择 - 堆叠多个 View 并删除重复项

Python SQL数据库查询给出 "Too few parameters"错误

Java 运行时错误

使用表 2 值添加到表 1 时出现 PHP SQL 语法错误