1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 常用的数据库统计SQL语句

常用的数据库统计SQL语句

时间:2020-05-20 05:24:10

相关推荐

常用的数据库统计SQL语句

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, 日期) =

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 = 03

EXEC @RC = [TEST].[dbo].[DezaiCn_SaleAnalysisCompareByDate] @compareMonth

DECLARE @PrnLine nvarchar(4000)

PRINT '存储过程: TEST.dbo.DezaiCn_SaleAnalysisCompareByDate'

Select @PrnLine = '返回代码 = ' + CONVERT(nvarchar, @RC)

PRINT @PrnLine

另见:/eastjazz/archive//03/18/4001420.aspx

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。