首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个数据库查询的有关问题,请大家帮帮忙

2012-06-15 
一个数据库查询的问题,请大家帮帮忙!单位表:id,name加油表:单位id,单位name,车辆号码,加油数量,加油时间查

一个数据库查询的问题,请大家帮帮忙!
单位表:id,name
加油表:单位id,单位name,车辆号码,加油数量,加油时间

查询结果如下:

单位一 当日加油数量 累计加油数量 单位二 当日加油数量 累计加油数量
001 100 1080 101 200 2000
002 200 3000 102 540 8124

请大家帮忙看看这个查询应该怎么写,用一条语句是不是写不出来啊,如果用视图的话应该怎么写,谢谢!
查询的时候根据时间查询。 
 



[解决办法]

SQL code
--> 测试数据:@tbdeclare @tb table([id] int,[teamid] int,[team] varchar(6),[carcode] varchar(5),[shuliang] numeric(7,4),[shijian] datetime)insert @tbselect 1,1,'厂一队','00001',100.0000,'2012-6-12 0:00:00' union allselect 2,1,'厂一队','00001',200.0000,'2012-6-13 0:00:00' union allselect 3,2,'厂二队','00002',300.0000,'2012-6-12 0:00:00' union allselect 4,2,'厂二队','00002',400.0000,'2012-6-13 0:00:00' union allselect 5,1,'厂一队','00002',100.0000,'2012-6-12 0:00:00' union allselect 6,1,'厂一队','00002',200.0000,'2012-6-13 0:00:00' union allselect 7,3,'厂三队','00010',500.0000,'2012-6-12 0:00:00'--SQL语句--得到每个team,carcode的当天及累计数量SELECT rowid=ROW_NUMBER() OVER(PARTITION BY teamid,team ORDER BY teamid),     teamid,team,carcode,    SUM(CASE WHEN shijian >= CONVERT(varchar(10),GETDATE(),120)                   AND shijian < CONVERT(varchar(10),DATEADD(day,1,GETDATE()),120)              THEN shuliang ELSE 0 END) AS CurrentDay,       SUM(shuliang) AS total INTO #TMPFROM @tbGROUP BY teamid,team,carcode;--得到一共有多少个team,并生成列字符串DECLARE @s varchar(MAX);SET @s='';SELECT @s=@s+',MAX(CASE WHEN teamid='+RTRIM(teamid)+' THEN carcode ELSE '''' END) AS ['+team+']'            +',MAX(CASE WHEN teamid='+RTRIM(teamid)+' THEN RTRIM(CAST(CurrentDay AS numeric(12,2))) ELSE '''' END) AS [' + team+'_当天]'            +',MAX(CASE WHEN teamid='+RTRIM(teamid)+' THEN RTRIM(CAST(total AS numeric(12,2))) ELSE '''' END) AS [' + team+'_累计]'FROM #TMPGROUP BY teamid,teamORDER BY teamid;--执行SET @s='SELECT '+STUFF(@s,1,1,'')+' FROM #TMP GROUP BY rowid';PRINT @s;EXEC(@s);--删除临时表DROP TABLE #TMP;/*厂一队    厂一队_当天    厂一队_累计    厂二队    厂二队_当天    厂二队_累计    厂三队    厂三队_当天    厂三队_累计00001    200.00    300.00    00002    400.00    700.00    00010    0.00    500.0000002    200.00    300.00                        */ 

热点排行