mysql - 连接多个表,然后根据 CASE 条件将其中一个表中的数据显示为单独的列
问题描述
我已经能够连接来自不同数据库的多个表,但我不知道如何使用案例标准将其中一个表中的数据显示到单独的列中。
select p.ProductID as pid,
s.ItemCode as icode,
s.ItemDescription,
s.UOM,
s.AvgCost,
b.ST as stockAvl,
CASE WHEN c.saledate BETWEEN DATE_SUB(NOW(),INTERVAL 60 DAY) AND NOW() THEN SUM(c.qty) ELSE 0 END as s60,
CASE WHEN c.saledate BETWEEN DATE_SUB(NOW(),INTERVAL 90 DAY) AND NOW() THEN SUM(c.qty) ELSE 0 END as s90,
CASE WHEN c.saledate BETWEEN DATE_SUB(NOW(),INTERVAL 180 DAY) AND NOW() THEN SUM(c.qty) ELSE 0 END as s180,
CASE WHEN c.saledate BETWEEN DATE_SUB(NOW(),INTERVAL 365 DAY) AND NOW() THEN SUM(c.qty) ELSE 0 END as s365
FROM db_inventory.StockMain_T s
left outer join db_inventory.stkbalance_T b on s.ItemCode=b.itemid
left outer join db_main.SaleItems_T c on c.ItemID=s.ItemCode
left outer join db_inventory.ProductMaster_T p on p.ProductID=s.ProdID
group by icode
order by pid
上述查询有效,但与结果不一致。s60、s90、s180 和 s365 列未显示完整数据。结果仅显示少数项目的数据,而不是所有项目的数据,而这些项目的数据也记录到 SaleItems_T 表中,但结果显示这些项目的数据为 0。似乎无法理解我在查询中做错了什么。
这是查询的结果。为简化起见,我从上面的原始查询中删除了几列,并保留了 5 列。ttlsales 显示自开始以来数据库历史中所有销售额的总和。s300 和 s900 除一项外为空白。s9000 使用时也是整个历史
NOW()-INTERVAL 9000 DAY
所以它也显示了整个历史。问题在于列 s300 和 s900 不显示数据,而数据存在于 saleitems 表中。
解决方案
CASE
汇总每个语句的返回值:
SUM(CASE WHEN c.saledate BETWEEN DATE_SUB(NOW(),INTERVAL 60 DAY) AND NOW() THEN c.qty ELSE 0 END) as s60,
SUM(CASE WHEN c.saledate BETWEEN DATE_SUB(NOW(),INTERVAL 90 DAY) AND NOW() THEN c.qty ELSE 0 END) as s90,
SUM(CASE WHEN c.saledate BETWEEN DATE_SUB(NOW(),INTERVAL 180 DAY) AND NOW() THEN c.qty ELSE 0 END) as s180,
SUM(CASE WHEN c.saledate BETWEEN DATE_SUB(NOW(),INTERVAL 365 DAY) AND NOW() THEN c.qty ELSE 0 END) as s365
推荐阅读
- doit - doit - 是否有命令行选项强制重新运行特定任务
- python - 如何使用 Databricks 从 Azure 数据仓库读入 Python?
- vue.js - Vue JS使用局部变量而不在data()函数中定义
- python - 基于参考表的 Pandas 设置值的规范方法
- google-cloud-firestore - Firestore 规则 - 按字段保护数据
- javascript - Javascript调用Name获取用户名和密码,返回多个值
- sql - 检索特定日期 SQL 的成本
- office-js - 选择多个项目后,Office.context.mailbox.item 为空
- c++ - 什么是 C++20 std::atomic
> 和 std::atomic >? - python - Python - 无法将数值分配给空输入以进行数学计算