有表order_20060612,20060612表示2006年6月12日当天的订单表,每天都有这样的一张表,表中有一个money字段,如果有新的订单就加一条记录。写一存储过程sp_aa,求出一个时间段内的订单总数和总的金额。
其中@start为开始时间,@end为结束时间,@count为订单总数(输出类型),@totalmoney为总金额(输出类型)
其中@start为开始时间,@end为结束时间,@count为订单总数(输出类型),@totalmoney为总金额(输出类型)
解决方案 »
- 为什么我用response.addheader指定下载文件的名字每次都失效?
- Reshaper设置的问题
- 谁能推荐学习C#和AJAX的好的学习电子书
- |M| 防止按钮二次提交时,验证控件对这个按钮就无效了 怎么办 谢谢
- 简单问题,帮帮忙,散分
- 简单的问题,答对即给分。
- 如何获取按钮点击事件??路过的进来指点指点 谢谢~~~~
- .Net弱弱的问题
- 关于连接access数据库字符串在web.config中的问题
- 如何把iframe中的文字提取到文本框中?
- 关于Connection有点迷茫-请高手指点
- sqlconnection cn.open 后 使用,close(); 点解所连接的数据库连接还是存在。
(
@start VARCHAR(20),
@end VARCHAR(20),
@totalmoney int output,
@count int output
) ASDECLARE @SQL VARCHAR(8000), @TblName VARCHAR(20), @YMFrom VARCHAR(6), @YMTo VARCHAR(6)
SELECT @YMFrom =CAST(DATEPART(YYYY, CAST(@start AS DATETIME)) AS VARCHAR(4))+
SUBSTRING(CAST(DATEPART(MM, CAST(@start AS DATETIME))+100 AS VARCHAR(3)), 2, 2)+
SUBSTRING(CAST((DATEPART(DD,CAST(@start AS DATETIME))+1000) AS VARCHAR(4)),3,2),
@YMTo =CAST(DATEPART(YYYY, CAST(@end AS DATETIME)) AS VARCHAR(4))+
SUBSTRING(CAST(DATEPART(MM, CAST(@end AS DATETIME))+100 AS VARCHAR(3)), 2, 2)+
SUBSTRING(CAST((DATEPART(DD,CAST(@end AS DATETIME))+1000) AS VARCHAR(4)),3,2)---------通过传入参数‘2006-05-12’得到‘200605’这样的字符串,用于确定游标访问的表SET @SQL = 'SELECT * FROM EventsTmp'
---------------------------------------------------------------------------------------游标
DECLARE MyCur CURSOR FOR
SELECT Name
FROM dbo.sysobjects
WHERE Name like 'order[_]%'
AND SUBSTRING(Name,7,4)+
SUBSTRING(Name,11,2)+SUBSTRING(Name,13,2) BETWEEN @YMFrom AND @YMTo---------得到要查询的表
OPEN MyCur------------打开游标
FETCH NEXT FROM MyCur
INTO @TblName ---------取得下一个表名放入临时变量@TblName,从第一个开始取
WHILE @@FETCH_STATUS = 0 ------从游标里取得行(表)成功
BEGIN
IF @SQL=''
SET @SQL='SELECT * FROM '+@TblName
ELSE
SET @SQL=@SQL+' UNION SELECT * FROM '+@TblName
FETCH NEXT FROM MyCur
INTO @TblName ---------再取得下一个表名放入临时变量@TblName
END
CLOSE MyCur-----操作游标结束,关闭游标
DEALLOCATE MyCur-------删除游标引用现在你要的什么定单数啊,总和都可以从@SQL中查询得了
{
@statedate datetime,
@enddate datetime,
@ordercount int OUTPUT,
@ordermoney money OUTPUT
}
as
SELECT COUNT(*) FROM ORDERS WHERE STATE=@STATEDATE AND ENDDATE=@ENDDATE
SELECT SUM(ORDERMONEY) FROM ORDERS WHERE STATE=@STATEDATE AND ENDDATE=@ENDDATE
SQL还是不行啊
效率肯定粉低
楼主可以参考CREATE PROCEDURE [dbo].[GetOrderInfo]
@tableName varchar(128)
AS
declare @sql nvarchar(1024)
set @sql = N'select count(*) ,sum([Money]) from ' + @tableName exec (@sql)
GOCREATE PROCEDURE [dbo].[GetAllOrderDetail]
@BeginDate datetime,
@endDate datetime
AS
CREATE TABLE #TEMP(orderCount int, orderMonkey money) while (datediff(day,@BeginDate,@endDate) > 0)
begin
declare @tableName varchar(64)
declare @tempDate datetime
set @tempDate = dateadd(day,1,@BeginDate)
set @tableName = 'order_' + replace(convert( varchar(10),@tempDate,20),'-','')
if( object_id(@tableName) > 0)
begin
insert into #TEMP(orderCount,orderMonkey)
EXEC GETORDERINFO @tableName
end
set @BeginDate = @tempDate
endSELECT sum(orderCount),sum(orderMonkey) FROM #TEMPDROP TABLE #TEMP
GO
没有使用游标,使用了while循环,给开始时间不停的+1天知道结束时间构建了个临时表(没有用union all的方式)然后进行插入,最后删除……