导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

求助SQL大侠:这个SQL语句怎么写呢?

qjwyk 2002-12-28 12:11:03
是这样的:有一个数据采集点,每个数据采集点有一个电话拨入号(PhoneNum),每个采集点下面有若干个站(ChildID),每个每个站ChildID下有四个ChannelID,每个ChannelID下有三个仪表(MeterID):温度InstTemp,压力InstPres,流量InstFlow

有两张表:
一张是DeviceInfo,有如下列:
PhoneNum,ChannelID,MeterID,ChildID,StationState,ComName,Mode,StationName
其中:PhoneNum,ChannelID,MeterID,ChildID是主健,一个PhoneNum下有几个ChildID,每个ChildID下有四个ChannelID,每个ChannelID下有三个MeterID;

另一张表是RTData,有如下列:
PhoneNum,ChannelID,ChildID,ColTime,InstPres(压力),InstTemp(温度),InstFlow(流量),AddupFlow(当前流量累计), AddupTemp(当前热量累计),YAddupFlow(昨日流量累计),YAddupTemp(昨日热量累计)。
PhoneNum,ChannelID,ChildID是主健,引用上面一张表DeviceInfo的三个对应字段做外健。

现在要这样一个记录集:
取出第一张表的PhoneNum,ChannelID,ChildID,StationName,第二张表的InstTemp(温度),InstFlow(流量),AddupFlow(当前流量累计), AddupTemp(当前热量累计),YAddupFlow(昨日流量累计),YAddupTemp(昨日热量累计),同时要根据AddupFlow(当前流量累计)+YAddupFlow(昨日流量累计)+YAddupFlow(昨日流量累计)+……,来算出本月的流量累计。

该怎么写SQL语句阿?尤其是那个本月累计怎么算阿?
...全文
5 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
My_first 2002-12-28
楼上的星测得真快。
回复
CrazyFor 2002-12-28
select a.*,b.*,sum(AddupFlow+YAddupFlow) from deviceinfo a left outer join rtdate b on a.phonenum=b.phonenum and a.channelid=b.channelid and a.childid=b.childid
where datepart(month,b.coltime)=monthNum and datepart(year,b.coltime)=yearNum
回复
qjwyk 2002-12-28
多谢。不过好像还有点问题。
我把一部分数据贴出来给你看:
DeviceInfo:

PhoneNum,ChannelID,MeterID,ChildID,StationState,ComName,Mode,StationName
001 01 01 00 1 COM1 0 Lab
001 01 02 00 1 COM1 0 LAB
001 01 03 00 1 COM1 0 LAB
001 02 01 00 1 COM1 0 LAB
001 02 02 00 1 COM1 0 LAB
001 02 03 00 1 COM1 0 LAB
001 03 01 00 1 COM1 0 LAB
001 03 02 00 1 COM1 0 LAB
001 03 03 00 1 COM1 0 LAB
001 04 01 00 1 COM1 0 LAB
001 04 02 00 1 COM1 0 LAB
001 04 03 00 1 COM1 0 LAB

RTDataTbl:

PhoneNum ,ChannelID ,ChildID,ColTime(采集时间) ,InstPres,InstTemp,InstFlow ,AddupFlow,AddupTemp,YAddupFlow,YAddupTemp

后面的数据没有列出,InstPres,InstTemp,InstFlow 对每一采集时间是不一样的,而AddupFlow,AddupTemp,YAddupFlow,YAddupTemp 对同一天是一样的

PhoneNum ChannelID ChildID ColTime
001 01 00 2002-12-16 10:29:35.000
001 01 00 2002-12-16 10:29:46.000
001 01 00 2002-12-16 10:29:54.000
001 01 00 2002-12-16 10:30:04.000
001 01 00 2002-12-16 10:36:30.000
001 01 00 2002-12-16 10:36:38.000
001 02 00 2002-12-16 10:29:35.000
001 02 00 2002-12-16 10:29:46.000
001 02 00 2002-12-16 10:29:54.000
001 02 00 2002-12-16 10:30:05.000
001 02 00 2002-12-16 10:36:30.000
001 02 00 2002-12-16 10:36:38.000
001 03 00 2002-12-16 10:29:35.000
001 03 00 2002-12-16 10:29:46.000
001 03 00 2002-12-16 10:29:54.000
001 03 00 2002-12-16 10:30:05.000
001 03 00 2002-12-16 10:36:30.000
001 03 00 2002-12-16 10:36:38.000
001 04 00 2002-12-16 10:29:35.000
001 04 00 2002-12-16 10:29:46.000
001 04 00 2002-12-16 10:29:54.000
001 04 00 2002-12-16 10:30:05.000
001 04 00 2002-12-16 10:36:30.000
001 04 00 2002-12-16 10:36:38.000

回复
My_first 2002-12-28
还有个家伙没睡呀,我正找你有事呢? 楼下有个问题,关于存储过程出错的控制
回复
bluepower2008 2002-12-28
自连接
回复
qjwyk 2002-12-28
我弄出来了

select d.StationName,r.PhoneNum,r.ChildID,r.ChannelID,MAX(r.ColTime) ColTime,max(r.InstPres) InstPres,
max(r.InstFlow) InstFlow,max(r.InstTemp) InstTemp,
max(r.adduptemp) TaddupTemp,max(r.addupflow) TaddupFlow,
max(r.addupTemp)+Sum(r.YaddupTemp) MaddupTemp,max(r.addupFlow)+Sum(r.YaddupFlow) MaddupFlow
from DeviceInfoTbl d,rtdatatbl r
where datepart(month,r.coltime)=datepart(month,getdate()) and datepart(year,r.coltime)=datepart(year,getdate())
AND d.PhoneNum=r.PhoneNum and d.ChildID=r.ChildID and d.ChannelID=r.ChannelID and d.mode=1
group by d.StationName,r.PhoneNum,r.ChildID,r.ChannelID

谢谢CrazyFor(烟草)的提示,
还有其他的朋友

可以交差了

回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告