如何构建SQL查询以显示两列不同日期范围的数据?
我正在尝试从Oracle11g数据库构建一个查询,以便在报表中使用。我需要使用两个表CONTACT和CONTACT_EXT从中获取数据,并比较两个日期范围内的联系人总数。这些表通过ID匹配进行连接 联系人:如何构建SQL查询以显示两列不同日期范围的数据?,sql,oracle,select,oracle11g,Sql,Oracle,Select,Oracle11g,我正在尝试从Oracle11g数据库构建一个查询,以便在报表中使用。我需要使用两个表CONTACT和CONTACT_EXT从中获取数据,并比较两个日期范围内的联系人总数。这些表通过ID匹配进行连接 联系人: ID | DATE ---------- 1 12/12/2010 2 12/11/2010 3 14/09/2011 联系电话 ID | TYPE ---------- 1 MAIL 2 FAX 3 FAX 例如,如果我将时段A设置为2010年1月1日至2
ID | DATE
----------
1 12/12/2010
2 12/11/2010
3 14/09/2011
联系电话
ID | TYPE
----------
1 MAIL
2 FAX
3 FAX
例如,如果我将时段A设置为2010年1月1日至2010年12月12日之间,时段B设置为2011年1月1日至2011年11月11日之间
TYPE | PERIOD A | PERIOD B | TOTAL
MAIL 1 0 1
FAX 1 1 2
问候,,
罗布
问候,,
Rob.只需进行自连接:
select type,period_a,period_b,period_a+period_b as total
from(
select type,count(1) as period_a
from contact_ext
left join contact
using(id)
where date>='20100101' and date<='20101212'
group by 1
)a
join(
select type,count(1) as period_b
from contact_ext
left join contact
using(id)
where date>='20110101' and date<='20111111'
group by 1
)b
using(type);
只需进行自连接:
select type,period_a,period_b,period_a+period_b as total
from(
select type,count(1) as period_a
from contact_ext
left join contact
using(id)
where date>='20100101' and date<='20101212'
group by 1
)a
join(
select type,count(1) as period_b
from contact_ext
left join contact
using(id)
where date>='20110101' and date<='20111111'
group by 1
)b
using(type);
答案1:在where条款中,A期设置在2010年1月1日至2010年12月12日之间,或B期设置在2011年1月1日至2011年11月11日之间 where子句中的用法或条件
Ans 2:您可以合并周期A和周期B的两个不同select语句Ans 1:在where子句中,将周期A设置为2010年1月1日至2010年12月12日之间,或将周期B设置为2011年1月1日至2011年11月11日之间 where子句中的用法或条件
回答2:你可以合并周期A和周期B的两个不同select语句我已经测试过了,它完全按照我的要求工作,非常感谢!我想指出的是,这个查询所做的工作比需要的要多,因为它必须访问每个表两次。我已经测试过了,它完全按照我想要的方式工作,非常感谢!我想指出,这个查询做的工作比需要的多,因为它必须访问每个表两次。这实际上是正确的答案,由于接受的答案不适用于在时段B中有值但在时段a中没有值的情况,即该行未返回,因此有一个问题是,由于重叠值上的值是“双重计数”的,因此总计是错误的。这实际上是正确的答案,由于接受的答案不适用于我们在时段B中有值但在时段a中没有值的情况,即该行没有返回,因此一个问题是,由于重叠值上的值是“双重计数”的,因此总计是错误的。