我想要归还所有人,无论他们是否在任何一天都有销售。我最初的解决方法是
SELECT
P.[Name], P.[id],
F.[DATE], F.[Figure], F.[id]
FROM
Person P
LEFT JOIN
Figure F ON P.id = F.id
结果的一个例子是
Name id DATE Figure
--------------------------------------------
Tom 1 2017-09-27 15
Fred 2 2017-09-27 20
Jane 3 2017-09-25 0
Ben 4 2017-09-25 0
现在,只要我将日期限制在今天的日期,我就什么也得不到。
SELECT
P.[Name], P.[id],
F.[DATE], F.[Figure], F.[id]
FROM
Person P
LEFT JOIN
Figure F ON P.id = F.id
WHERE
F.Date = GETDATE()
我理解这可能是因为没有人附上今天的日期,但即使他们今天什么都没有,我怎么还能展示所有的人呢?我认为左连接会实现这一点,但事实并非如此。
我想要的结果是:
Name id DATE Figure
--------------------------------------------
Tom 1 2017-10-02 0
Fred 2 2017-10-02 0
Jane 3 2017-10-02 0
Ben 4 2017-10-02 0
表中没有键,所以我觉得这可能就是为什么左连接没有按照我的预期工作,但有没有人有任何想法如何才能得到所需的结果?
答案 0 :(得分:2)
首先,条件需要放在myComboBox.SelectedItem = ((List<MyType>)myComboBox.DataSource)
.FirstOrDefault(a => a.prop2 == myType.prop2val);
子句而不是ON
子句中,因为它在第二个表上。
其次,WHERE
- 尽管它的名字 - 有一个时间组件。因此,将其转换为getdate()
:
date
答案 1 :(得分:0)
将您的查询放入cte然后从中拉出以获得所需的结果:
;with cte_example
as
(SELECT
P.[Name],
P.[id],
F.[DATE], F.[Figure], F.[id]
FROM
Person P
LEFT JOIN Figure F
ON P.id = F.id)
select Name
,id
,cast(getdate() as date) as date
,case when date = convert(date, getdate()) then Figure else 0 end as Figure
from cte_example
我做了一个rextester example所以你可以看到