日期:2014-05-16  浏览次数:20587 次

分别在范围1和范围2中查询符合条件的值,若范围1中没有符合条件的值,则在范围2中查询
分别在范围1和范围2中查询符合条件的值,并根据给定条件合并成一条记录,若范围1中没有符合条件的值,则在范围2中查询。
具体如下:


------解决方案--------------------
先给你个建议,你最好弄出一些数据来以及大家要的结果,大家可以帮写sql,然后测试对不对。你贴一张图片,谁有那么多的时间去生成测试数据呢?
------解决方案--------------------
上面说的对,最好提供建表语句,以及 插入数据的语句,这样大家才能更好的帮你
------解决方案--------------------
猜测楼主的意思,写了如下的SQL,要的日期直接更换即可

SELECT t1.LOCAL,t1.city,t1.BSC,t1.BTS_Name,
MAX(CASE t2.Datetime WHEN '2013-05-10 00:00:00' THEN CONVERT(varchar(100),t2.Datetime, 23) END) AS StartTime,
MAX(CASE t2.Datetime WHEN '2013-05-15 00:00:00' THEN CONVERT(varchar(100),t2.Datetime, 23) END) AS EndTime,
MAX(CASE t2.Datetime WHEN '2013-05-10 00:00:00' THEN t2.Energy END) AS StartEnergy,
MAX(CASE t2.Datetime WHEN '2013-05-15 00:00:00' THEN t2.Energy END) AS EndEnergy,
MAX(CASE t2.Datetime WHEN '2013-05-10 00:00:00' THEN t2.Energy_Ext END) AS StartEnergy_Ext,
MAX(CASE t2.Datetime WHEN '2013-05-15 00:00:00' THEN t2.Energy_Ext END) AS EndEnergy_Ext
FROM LocalBscBts AS t1 INNER JOIN EnergyTab_Ext AS t2 ON t1.ID = t2.BTSTab_ID
WHERE datetime = '2013-05-10 00:00:00' OR datetime= '2013-05-15 00:00:00'
GROUP BY t1.LOCAL,t1.city,t1.BSC,t1.BTS_Name

------解决方案--------------------

;with tb as
(
select local,city,bsc,bts_name,Energy,Energy_Ext,DateTime ,ROW_NUMBER()over(order by DateTime) as orderid 
from 
(
select a.local,a.city,a.bsc,a.bts_name,Energy,Energy_Ext,b.DateTime 
From LocalBscBts a join EnergyTab_Ext b on a.ID=b.BTSTab_ID
where b.DateTime>='2013-05-10'
and b.DateTime<='2013-5-15'
union all
select a.local,a.city,a.bsc,a.bts_name,Energy,Energy_Ext,b.DateTime 
From LocalBscBts a join EnergyTab_Ext b on a.ID=b.BTSTab_ID
join (
select a.local,a.bts_name,max(b.DateTime) as DateTime 
From LocalBscBts a join EnergyTab_Ext b on a.ID=b.BTSTab_ID
where b.DateTime>=dateadd(day,-2,'2013-05-10')
and b.DateTime<'2013-05-10'
group by a.local,a.bts_name
) c on a.local=c.local and a.bts_name=c.bts_name and b.DateTime=c.DateTime
) t
)
select local,city,bsc,bts_name,Energy,Energy_Ext,convert(varchar(10),DateTime,120) as Dt,stype into #t 
from tb a
join (
select min(orderid) as orderid,0 as stype from tb group by local,city,bsc,bts_name  
union all select max(orderid) as orderid,1 as stype from tb group by local,city,bsc,bts_name 
) b on a.orderid=b.orderid

select a.local,a.city,a.bsc,a.bts_name,
a.Dt as StartTime,b.Dt as EndTime,
a.Energy as StartEnergy,b.Energy as EndEnergy ,
a.Energy_Ext as StartEnergy_Ext,b.Energy_Ext as EndE