即使mysql查询中缺少值,也需要一行
也许我的谷歌浏览器坏了 我有一张桌子:sub_transfer_jobs即使mysql查询中缺少值,也需要一行,mysql,Mysql,也许我的谷歌浏览器坏了 我有一张桌子:sub_transfer_jobs job_date mo_id sub_quantity shift_id 2017-05-16 24581 12 1 2017-05-16 86122 8 2 etc. 另一个表格:mo_数字 mo_id customer 24581 cust1 86122 cust2 68515
job_date mo_id sub_quantity shift_id
2017-05-16 24581 12 1
2017-05-16 86122 8 2
etc.
另一个表格:mo_数字
mo_id customer
24581 cust1
86122 cust2
68515 cust1
etc.
我还有一张桌子:日历
This just has a date value for every date
我需要的是每个客户每天的金额字符串列表
范例
2017-05-15 cust1 50
2017-05-15 cust2 0
2017-05-16 cust1 22
2017-05-16 cust2 10
etc
我将得到一个基于日期范围的客户列表
这就是我所在的位置,但子查询有问题
SELECT `sub_transfer_jobs`.`sub_quantity`, `sub_transfer_jobs`.`job_date`, `sub_transfer_jobs`.`shift_id`, `mo_numbers`.`customer`
FROM `sub_transfer_jobs`
join mo_numbers on `mo_numbers`.`mo_id` = `sub_transfer_jobs`.`mo_id`
right join calendar on `calendar`.`datefield` = `sub_transfer_jobs`.`job_date`
right join (
select DISTINCT `mo_numbers`.`customer` from sub_transfer_jobs
join `mo_numbers` on `mo_numbers`.`mo_id` = `sub_transfer_jobs`.`mo_id`
where job_date > '2017-04-15'
) as customerList on customerList.customer = mo_numbers.customer
where job_date > '2017-04-15'
group by `mo_numbers`.`customer`, `sub_transfer_jobs`.`job_date`
编辑:更正sql以获得所需内容(按逗号分隔分组)
您需要使用
交叉联接
来获取客户和日期的所有组合。然后,LEFT JOIN
使用一个查询来获取每个客户在每个日期的总计
SELECT m.date, c.customer, IFNULL(t.total, 0) AS total
FROM mo_numbers AS m
CROSS JOIN customer AS c
LEFT JOIN (
SELECT date, mo_id, SUM(quantity) AS total
FROM mo_numbers
GROUP BY date, mo_id
) AS t ON m.mo_id = t.mo_id AND c.mo_id = t.mo_id
我不明白结果集如何与试图获得每个客户每天的总数量的数据集相关联。如果客户没有当天的记录,我需要0。我还没有把数量加进去。我这样做是为了看看我是否至少能看到所有的记录,这些表就是你在问题中显示的那些?很难理解它们与您显示的查询之间的关系。更新以反映表名称对于我所需要的不是正确的sql,但是交叉连接是我所需要的。非常感谢。
cust1 0,1857,1262,1166,517,1551,0,0,1469,1670,400,0,0,0,...
cust2 0,123,7,0,7,0,0,0,0,0,0,0,0,0,0,84,70,9,53,3,0,0,4...
cust3 0,0,75,425,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...
cust4 0,0,41,36,44,26,0,0,0,41,0,0,0,0,0,16,88,12,0,0,0,...
cust5 0,277,552,433,280,491,0,0,124,880,1269,0,0,0,0,495...
cust6 0,255,124,620,184,129,0,0,309,103,88,0,0,0,0,118,2...
cust7 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,...
cust8 0,209,123,15,84,296,0,0,296,15,262,0,0,0,0,301,200,...
SELECT m.date, c.customer, IFNULL(t.total, 0) AS total
FROM mo_numbers AS m
CROSS JOIN customer AS c
LEFT JOIN (
SELECT date, mo_id, SUM(quantity) AS total
FROM mo_numbers
GROUP BY date, mo_id
) AS t ON m.mo_id = t.mo_id AND c.mo_id = t.mo_id