我有两个桌子。第一个表是一个批次列表-表名public class MyCustomTab : TabControl
{
public MyCustomTabPageCollection TabPages { get; set; }
public MyCustomTab() : base()
{
base.Width = 200;
base.Height = 100;
}
}
。一共有3个批次,由三个人管理,这些字段是:lot.lotID,lot.LotName
每天,这些批次都会收集卵,但是有时收集人员会忘记在一天结束时进入。这些条目进入名为httpHeaders:
- name: Authorization
value: Basic cnBjOnUzSGRlM0xvaWI1SGpEcTFTZGVoQktpU1NBbHE=
- name: Accept
value: application/json
的表中。该表具有deposit.DepID,deposit.DepDate,deposit.LotID和deposit.DepAmount
我需要每天列出每个批次并获取每个存款金额。如果没有任何记录,则应显示该记录是NULL值或0,而不是不显示记录。例如,如果在2018-10-11的批次2的数据库中未插入任何条目,则应该看到此记录如果我查询两天的数据:
lot
或者,如果10-10的批次2说:
deposit
有人可以给我一些指导吗?看起来这简直太疯狂了,但是在这个问题上我找不到太多。在此先感谢!
PS-以下是两个表: 很多:
LotID | LotName | Date | DepAmount
1 | Sarah | 2018-10-09 | 67
2 | Dave | 2018-10-09 | 84
3 | Mike | 2018-10-09 | 78
1 | Sarah | 2018-10-10 | 100
2 | Dave | 2018-10-10 | 0
3 | Mike | 2018-10-10 | 49
并存入:
2 | Dave | 2018-10-10 | {null}
答案 0 :(得分:1)
这是一个棘手的问题,因为直人LEFT JOIN
不能正常工作,因为某个人具有除deposit
中没有值的日期以外的其他日期的值。因此,我们需要首先CROSS JOIN
lot
并列出deposit
中所有日期的列表,以获得一组所有人和所有日期,即
SELECT l.LotId, l.LotName, dt.Date
FROM lot l
CROSS JOIN (SELECT DISTINCT DepDate AS Date
FROM deposit) dt
输出:
LotId LotName Date
1 Sarah 2018-10-09
2 Dave 2018-10-09
3 Mike 2018-10-09
1 Sarah 2018-10-10
2 Dave 2018-10-10
3 Mike 2018-10-10
然后,我们可以使用LEFT JOIN
表deposit
将此结果NULL
转换为0:SELECT l.LotId, l.LotName, dt.Date, COALESCE(d.DepAmount, 0) AS DepAmount
FROM lot l
CROSS JOIN (SELECT DISTINCT DepDate AS Date
FROM deposit) dt
LEFT JOIN deposit d ON d.LotId = l.lotId AND d.DepDate = dt.Date
ORDER BY Date, l.LotId
,以获取每天的存款清单。>
LotId LotName Date DepAmount
1 Sarah 2018-10-09 67
2 Dave 2018-10-09 84
3 Mike 2018-10-09 78
1 Sarah 2018-10-10 100
2 Dave 2018-10-10 0
3 Mike 2018-10-10 49
输出:
classes*.dex