【发布时间】:2015-05-13 12:57:54
【问题描述】:
我有问题
我需要从 Conto 中选择在 FromDate 和 Todate 之间处于活动状态的所有 contoNames 如果我在那个连接中没有得到匹配,我需要设置一个 NULL 或者做其他事情
但是我已经读到,在您的连接表达式中使用 AND 时,它会在执行连接和操作之前读取 And 语句 它的工作原理类似于 Where 语句过滤数据。
所以我没有得到 NULL 在这个例子中 -- 该语句给出了 0 行在该时间跨度内没有contractId
SELECT S.Name, C.ContoName, C.fromDate, C.Todate
From Sales
Left outer Sales S on S.ContractId = C.ContractId AND '2014-12-31' BETWEEN c.fromDate AND C.Todate
这是我想要实现的,要么在我的左连接中获得 NULL 值,要么做某种决策流程 如果 Timespan 中没有 contractId,则 只加入contractId
SELECT S.Name, C.ContoName, C.fromDate, C.Todate
From Sales
INNER JOIN Sales S on S.ContractId = C.ContractId AND ( '2014-12-31'BETWEEN c.fromDate AND C.Todate OR Sales.ContractId = Conto.ContractId )
不现实 AND 运算符的作用类似于 where 语句并在执行 JOIN 之前过滤数据
SELECT S.Name, coalesce(C.ContoName,C1.ContoName)contoName,C.fromDate,C.Todate
From Sales S
LEFT JOIN Conto C on S.ContractId = C.ContractId
AND '2014-12-31' >BETWEEN c.fromDate AND C.Todate )
LEFT JOIN Conto C1 on S.ContractId = C1.contractId
有没有人有使用 tsql 或标准 sql 以一种很好的方式解决这个问题的好主意
【问题讨论】:
-
您想查看您的所有联系人,即使他们在一段时间内不活跃?
标签: sql sql-server tsql