1.解决被零除(零做除数时)

–来自百度问吧

在统计系统中,需要求百分数,
如(sum(baseprice)-sum(quote))/sum(baseprice)*100)中,
如果sum(baseprice)为0,系统会报错,不能运行

把sum(baseprice) 改为
nullif(sum(isnull(baseprice,0)),0)
就可以了,除于0会出错,除于null就不会出错了

2.列出某年1-12月数据各产吕的销售数据

Select 产品ID AS 机型, SUM(CASE month(日期) WHEN 1 THEN 销售量 ELSE 0 END)
AS [一月], SUM(CASE month(日期) WHEN 2 THEN 销售量 ELSE 0 END) AS [二月],
SUM(CASE month(日期) WHEN 3 THEN 销售量 ELSE 0 END) AS [三月],
SUM(CASE month(日期) WHEN 4 THEN 销售量 ELSE 0 END) AS [四月],
SUM(CASE month(日期) WHEN 5 THEN 销售量 ELSE 0 END) AS [五月],
SUM(CASE month(日期) WHEN 6 THEN 销售量 ELSE 0 END) AS [六月],
SUM(CASE month(日期) WHEN 7 THEN 销售量 ELSE 0 END) AS [七月],
SUM(CASE month(日期) WHEN 8 THEN 销售量 ELSE 0 END) AS [八月],
SUM(CASE month(日期) WHEN 9 THEN 销售量 ELSE 0 END) AS [九月],
SUM(CASE month(日期) WHEN 10 THEN 销售量 ELSE 0 END) AS [十月],
SUM(CASE month(日期) WHEN 11 THEN 销售量 ELSE 0 END) AS [十一月],
SUM(CASE month(日期) WHEN 12 THEN 销售量 ELSE 0 END) AS [十二月]
FROM DezaiCN_Sale
Where datepart(year, 日期) = 2008
GROUP BY 产品ID

3.数据同比 环比分析
(参考邹捷的SQL)

程序代码 程序代码

Create procedure DezaiCn_SaleAnalysisCompareByDate
@compareMonth int
as

–统计处理
declare   @o_dt1   datetime,@o_dt2   datetime,
@n_dt1   datetime,@beginStasticDate   datetime,@endStasticDate   datetime
–计算各期的统计时间
select
@beginStasticDate=cast(@compareMonth*100+1   as   char(8)),     –本期统计的开始日期
@endStasticDate=dateadd(month,1,@beginStasticDate),                 –本期统计的结束日期
@n_dt1=dateadd(month,-1,@beginStasticDate),               –上期统计的开始日期
@o_dt1=dateadd(year,-1,@beginStasticDate),                 –去年同期统计的开始日期
@o_dt2=dateadd(month,1,@o_dt1)                   –去年同期统计的结束日期

select
店铺名=isnull(a.店铺名,b.店铺名),

本期开始=CONVERT(varchar(12) , @beginStasticDate, 102 ),

本期结束=CONVERT(varchar(12) , @endStasticDate, 102 ),

上期结束=CONVERT(varchar(12) , @n_dt1, 102 ),

本期=isnull(b.销售量2,0),

上期=isnull(b.销售量1,0),
上期差异=isnull(b.销售量2,0)-isnull(b.销售量1,0)  ,
去年开始=CONVERT(varchar(12) , @o_dt1, 102 ),

去年结束=CONVERT(varchar(12) , @o_dt2, 102 ),

去年同期=isnull(a.销售量,0),

去年同期差异=isnull(b.销售量2,0)-isnull(a.销售量,0)

from(
–去年同期的统计
select   店铺名,销售量=sum(销售量)
from   DezaiCn_Sale
where   日期   between   @o_dt1   and   @o_dt2
group   by   店铺名
)a   full   join(
–今年及上期统计
select   店铺名,
销售量1=sum(case   when   日期<@beginStasticDate   then    销售量   end),
销售量2=sum(case   when   日期>@beginStasticDate   then   销售量   end)
from   DezaiCn_Sale
where   日期   between   @n_dt1   and   @endStasticDate
group   by   店铺名,店铺名
)b   on   a.店铺名=b.店铺名

GO

执行

程序代码 程序代码
DECLARE @RC int
DECLARE @compareMonth int
Select @compareMonth = 200903
EXEC @RC = [TEST].[dbo].[DezaiCn_SaleAnalysisCompareByDate] @compareMonth
DECLARE @PrnLine nvarchar(4000)
PRINT ‘存储过程: TEST.dbo.DezaiCn_SaleAnalysisCompareByDate’
Select @PrnLine = ‘    返回代码 = ‘ + CONVERT(nvarchar, @RC)
PRINT @PrnLine

转载请标注编辑来源:常用的数据库统计SQL语句(2)

网络来源:http://www.dezai.cn/blog/article.asp?id=246   我想网 板凳 编辑

Tags:

分享
QQ书签
百度搜藏
Del.icio.us
Google书签
和讯网摘
天极网摘

回复已关闭.