SQL按照日、周、月、年统计数据的方法分享

–按日
select sum(consume),day([date]) from consume_record where year([date]) = ‘2006’ group by day([date])

–按周quarter
select sum(consume),datename(week,[date]) from consume_record where year([date]) = ‘2006’ group by datename(week,[date])

–按月
select sum(consume),month([date]) from consume_record where year([date]) = ‘2006’ group by month([date])

–按季
select sum(consume),datename(quarter,[date]) from consume_record where year([date]) = ‘2006’ group by datename(quarter,[date])
 

–按年
select sum(consume),year([date]) from consume_record where  group by year([date])

date_format

select date_format(create_time,'%y%u') weeks,count(caseid) count from tc_case group by weeks; 
select date_format(create_time,'%y%m%d') days,count(caseid) count from tc_case group by days; 
select date_format(create_time,'%y%m') months,count(caseid) count from tc_case group by months; 

date_format(date,format)
根据format字符串格式化date值。下列修饰符可以被用在format字符串中:
%m 月名字(january……december)
%w 星期名字(sunday……saturday)
%d 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%y 年, 数字, 4 位
%y 年, 数字, 2 位
%a 缩写的星期名字(sun……sat)
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(jan……dec)
%j 一年中的天数(001……366)
%h 小时(00……23)
%k 小时(0……23)
%h 小时(01……12)
%i 小时(01……12)
%l 小时(1……12)
%i 分钟, 数字(00……59)
%r 时间,12 小时(hh:mm:ss [ap]m)
%t 时间,24 小时(hh:mm:ss)
%s 秒(00……59)
%s 秒(00……59)
%p am或pm
%w 一个星期中的天数(0=sunday ……6=saturday )
%u 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一天
%% 一个文字“%”。

本文只是记录在项目中用到的统计的sql语句,记一笔以防忘了

/// <summary>
/// 获取统计数据
/// </summary>
/// <param name="ckey">店面ckey</param>
/// <param name="type">统计类型(日、周、月、年)</param>
/// <returns></returns>
[webmethod(true)]
public static string getdata3(string ckey, string type)
{
stringbuilder strsql = new stringbuilder();
#region sql语句
if (type == "0")
{
#region 日
strsql.appendformat(" with  weekdate ");
strsql.appendformat("     as ( select  dateadd(d, -day(getdate()) + 1, getdate()) as riqi ");
strsql.appendformat("       union all ");
strsql.appendformat("       select  riqi + 1 from   weekdate ");
strsql.appendformat("       where  riqi + 1 <= ( select  dateadd(d, -day(getdate()), dateadd(m, 1, getdate())) ) ");
strsql.appendformat("      ) ");
strsql.appendformat("  select convert(char(8), a.riqi, 112) as 日 ,day (convert(char(8), a.riqi, 112)) as dday, ");
strsql.appendformat("      isnull(tbb.日成交量, 0) as 日成交量 , ");
strsql.appendformat("      case when convert(char(8), a.riqi, 112) > convert(char(8), getdate(), 112) ");
strsql.appendformat("        then null ");
strsql.appendformat("        when convert(char(8), a.riqi, 112) <= convert(char(8), getdate(), 112) ");
strsql.appendformat("        then isnull(tbb.日成交量, 0) ");
strsql.appendformat("      end as 日成交数量 , ");
strsql.appendformat("      tbb.日实收金额 , ");
strsql.appendformat("      case when convert(char(8), a.riqi, 112) > convert(char(8), getdate(), 112) ");
strsql.appendformat("        then null ");
strsql.appendformat("        when convert(char(8), a.riqi, 112) <= convert(char(8), getdate(), 112) ");
strsql.appendformat("        then isnull(tbb.日实收金额, 0) ");
strsql.appendformat("      end as 日实收金额2 ");
strsql.appendformat("  from  weekdate a ");
strsql.appendformat("      left join ( select ( select  count(1) ");
strsql.appendformat("                 from   dbo.customerbase base ");
strsql.appendformat("                 where   ckey = '{0}' ", ckey);
strsql.appendformat("                      and " + impomo.totalconsumptionmon + " > 0 ");
strsql.appendformat("                      and targetdate = cus.targetdate ");
strsql.appendformat("                ) 日成交量 , ");
strsql.appendformat("                isnull(( select sum(total) ");
strsql.appendformat("                    from  ( select  sum(convert(float, isnull(( pc1 + pc2 + pc3 + pc4 + pc5 ), 0))) as total ");
strsql.appendformat("                         from   paymentcontent as pay ");
strsql.appendformat("                         where   paydate = cus.targetdate ");
strsql.appendformat("                              and pay.ckey = '{0}' ", ckey);
strsql.appendformat("                         union all ");
strsql.appendformat("                         select  sum(convert(float, isnull(recmoney, 0))) as total ");
strsql.appendformat("                         from   dbo.cardrecharge8 as recharge ");
strsql.appendformat("                         where   rechargdate = cus.targetdate ");
strsql.appendformat("                              and recharge.ckey = '{0}' ", ckey);
strsql.appendformat("                         union all ");
strsql.appendformat("                         select  sum(convert(float, isnull(( pc1 + pc2 + pc3 + pc4 + pc5 ), 0))) as total ");
strsql.appendformat("                         from   dbo.paymentswimming as payswim ");
strsql.appendformat("                         where   paydate = cus.targetdate ");
strsql.appendformat("                              and payswim.ckey = '{0}' ", ckey);
strsql.appendformat("                         union all ");
strsql.appendformat("                         select  sum(convert(float, isnull(( wp1 + wp2 + wp3 + wp4 + wp5 ), 0))) as total ");
strsql.appendformat("                         from   warepaymentcontent as ware ");
strsql.appendformat("                         where   paydate = cus.targetdate ");
strsql.appendformat("                              and ware.ckey = '{0}' ", ckey);
strsql.appendformat("                        ) b ");
strsql.appendformat("                   ), 0) as 日实收金额 , ");
strsql.appendformat("                targetdate 日 ");
strsql.appendformat("            from  dbo.customerbase cus ");
strsql.appendformat("            where  year(targetdate) = year(getdate()) ");
strsql.appendformat("                and month(targetdate) = month(getdate()) ");
strsql.appendformat("            group by targetdate ");
strsql.appendformat("           ) as tbb on convert(char(8), a.riqi, 112) = tbb.日 ");
#endregion
}
else if (type == "1")
{
#region 周
strsql.appendformat(" with  weekdate ");
strsql.appendformat("       as ( select  dateadd(wk, datediff(wk, 0, getdate()), 0) as riqi ");
strsql.appendformat("         union all ");
strsql.appendformat("         select  riqi + 1 from   weekdate ");
strsql.appendformat("         where  riqi + 1 <= ( select  dateadd(wk, datediff(wk, 0, getdate()), 6) ) ");
strsql.appendformat("        ) ");
strsql.appendformat("    select convert(char(8), a.riqi, 112) as 日 , ");
strsql.appendformat("        datename(weekday,convert(char(8), a.riqi, 112)) dday, ");
strsql.appendformat("        isnull(tbb.日成交量, 0) as 日成交量 , ");
strsql.appendformat("        case when convert(char(8), a.riqi, 112) > convert(char(8), getdate(), 112) ");
strsql.appendformat("          then null ");
strsql.appendformat("          when convert(char(8), a.riqi, 112) <= convert(char(8), getdate(), 112) ");
strsql.appendformat("          then isnull(tbb.日成交量, 0) ");
strsql.appendformat("        end as 日成交数量 , ");
strsql.appendformat("        tbb.日实收金额 , ");
strsql.appendformat("        case when convert(char(8), a.riqi, 112) > convert(char(8), getdate(), 112) ");
strsql.appendformat("          then null ");
strsql.appendformat("          when convert(char(8), a.riqi, 112) <= convert(char(8), getdate(), 112) ");
strsql.appendformat("          then isnull(tbb.日实收金额, 0) ");
strsql.appendformat("        end as 日实收金额2 ");
strsql.appendformat("    from  weekdate a ");
strsql.appendformat("        left join ( select ( select  count(1) ");
strsql.appendformat("                   from   dbo.customerbase base ");
strsql.appendformat("                   where   ckey = '{0}'", ckey);
strsql.appendformat("                        and " + impomo.totalconsumptionmon + " > 0 ");
strsql.appendformat("                        and targetdate = cus.targetdate ");
strsql.appendformat("                  ) 日成交量 , ");
strsql.appendformat("                  isnull(( select sum(total) ");
strsql.appendformat("                      from  ( select  sum(convert(float, isnull(( pc1 + pc2 + pc3 + pc4 + pc5 ), 0))) as total ");
strsql.appendformat("                           from   paymentcontent as pay ");
strsql.appendformat("                           where   paydate = cus.targetdate ");
strsql.appendformat("                                and pay.ckey = '{0}'", ckey);
strsql.appendformat("                           union all ");
strsql.appendformat("                           select  sum(convert(float, isnull(recmoney, 0))) as total ");
strsql.appendformat("                           from   dbo.cardrecharge8 as recharge ");
strsql.appendformat("                           where   rechargdate = cus.targetdate ");
strsql.appendformat("                                and recharge.ckey = '{0}'", ckey);
strsql.appendformat("                           union all ");
strsql.appendformat("                           select  sum(convert(float, isnull(( pc1 + pc2 + pc3 + pc4 + pc5 ), 0))) as total ");
strsql.appendformat("                           from   dbo.paymentswimming as payswim ");
strsql.appendformat("                           where   paydate = cus.targetdate ");
strsql.appendformat("                                and payswim.ckey = '{0}'", ckey);
strsql.appendformat("                           union all ");
strsql.appendformat("                           select  sum(convert(float, isnull(( wp1 + wp2 + wp3 + wp4 + wp5 ), 0))) as total ");
strsql.appendformat("                           from   warepaymentcontent as ware ");
strsql.appendformat("                           where   paydate = cus.targetdate ");
strsql.appendformat("                                and ware.ckey = '{0}'", ckey);
strsql.appendformat("                          ) b ");
strsql.appendformat("                     ), 0) as 日实收金额 , ");
strsql.appendformat("                  targetdate 日 ");
strsql.appendformat("              from  dbo.customerbase cus ");
strsql.appendformat("              where  datepart(wk, targetdate) = datepart(wk, getdate()) ");
strsql.appendformat("                  and datepart(yy, targetdate) = datepart(yy, getdate()) ");
strsql.appendformat("              group by targetdate ");
strsql.appendformat("             ) as tbb on convert(char(8), a.riqi, 112) = tbb.日 ");
#endregion
}
else if (type == "2")
{
#region 月
strsql.appendformat("select yearmonth.月 , ");
strsql.appendformat("    tb.月成交量 , ");
strsql.appendformat("    case when yearmonth.月 > month(getdate()) then null ");
strsql.appendformat("      when yearmonth.月 <= month(getdate()) then isnull(tb.月成交量, 0) ");
strsql.appendformat("    end as 月成交数量 , ");
strsql.appendformat("    tb.月实收总金额 , ");
strsql.appendformat("    case when yearmonth.月 > month(getdate()) then null ");
strsql.appendformat("      when yearmonth.月 <= month(getdate()) then isnull(tb.月实收总金额, 0) ");
strsql.appendformat("    end as 月实收总金额2 ");
strsql.appendformat(" from   ( select 1 as 月 union select 2 union select 3 union select 4 union select 5 union select 6 ");
strsql.appendformat("       union select 7 union select 8 union select 9 union select 10 union select 11 union select 12 ");
strsql.appendformat("      ) as yearmonth ");
strsql.appendformat("    left join ( select ( select  count(1) ");
strsql.appendformat("               from   dbo.customerbase base ");
strsql.appendformat("               where   ckey = '{0}' ", ckey);
strsql.appendformat("                    and " + impomo.totalconsumptionmon + " > 0 ");
strsql.appendformat("                    and month(targetdate) = month(cus.targetdate) ");
strsql.appendformat("              ) 月成交量 , ");
strsql.appendformat("              isnull(( select sum(total) ");
strsql.appendformat("                  from  ( select  sum(convert(float, isnull(( pc1 + pc2 + pc3 + pc4 + pc5 ), 0))) as total ");
strsql.appendformat("                       from   paymentcontent as pay ");
strsql.appendformat("                       where   month(paydate) = month(cus.targetdate) ");
strsql.appendformat("                            and pay.ckey = '{0}' ", ckey);
strsql.appendformat("                       union all ");
strsql.appendformat("                       select  sum(convert(float, isnull(recmoney, 0))) as total ");
strsql.appendformat("                       from   dbo.cardrecharge8 as recharge ");
strsql.appendformat("                       where   month(rechargdate) = month(cus.targetdate) ");
strsql.appendformat("                            and recharge.ckey = '{0}' ", ckey);
strsql.appendformat("                       union all ");
strsql.appendformat("                       select  sum(convert(float, isnull(( pc1 + pc2 + pc3 + pc4 + pc5 ), 0))) as total ");
strsql.appendformat("                       from   dbo.paymentswimming as payswim ");
strsql.appendformat("                       where   month(paydate) = month(cus.targetdate) ");
strsql.appendformat("                            and payswim.ckey = '{0}' ", ckey);
strsql.appendformat("                       union all ");
strsql.appendformat("                       select  sum(convert(float, isnull(( wp1 + wp2 + wp3 + wp4 + wp5 ), 0))) as total ");
strsql.appendformat("                       from   warepaymentcontent as ware ");
strsql.appendformat("                       where   month(paydate) = month(cus.targetdate) ");
strsql.appendformat("                            and ware.ckey = '{0}' ", ckey);
strsql.appendformat("                      ) b ");
strsql.appendformat("                 ), 0) as 月实收总金额 , ");
strsql.appendformat("              month(targetdate) 月 ");
strsql.appendformat("          from  dbo.customerbase cus ");
strsql.appendformat("          where  year(targetdate) = year(getdate()) ");
strsql.appendformat("          group by month(cus.targetdate) ");
strsql.appendformat("         ) as tb on yearmonth.月 = tb.月 ");
#endregion
}
else if (type == "3")
{
#region 年
strsql.appendformat("select ( select  count(1) ");
strsql.appendformat("       from   dbo.customerbase base ");
strsql.appendformat("       where   ckey = '{0}' ", ckey);
strsql.appendformat("            and " + impomo.totalconsumptionmon + " > 0 ");
strsql.appendformat("            and year(targetdate) = year(cus.targetdate) ");
strsql.appendformat("      ) 年成交量 , ");
strsql.appendformat("      convert(nvarchar(20),convert(decimal(18,2),isnull(( select sum(total) ");
strsql.appendformat("          from  ( select  sum(convert(float, isnull(( pc1 + pc2 + pc3 + pc4 + pc5 ), 0))) as total ");
strsql.appendformat("               from   paymentcontent as pay ");
strsql.appendformat("               where   year(paydate) = year(cus.targetdate) ");
strsql.appendformat("                    and pay.ckey = '{0}' ", ckey);
strsql.appendformat("               union all ");
strsql.appendformat("               select  sum(convert(float, isnull(recmoney, 0))) as total ");
strsql.appendformat("               from   dbo.cardrecharge8 as recharge ");
strsql.appendformat("               where   year(rechargdate) = year(cus.targetdate) ");
strsql.appendformat("                    and recharge.ckey = '{0}' ", ckey);
strsql.appendformat("               union all ");
strsql.appendformat("               select  sum(convert(float, isnull(( pc1 + pc2 + pc3 + pc4 + pc5 ), 0))) as total ");
strsql.appendformat("               from   dbo.paymentswimming as payswim ");
strsql.appendformat("               where   year(paydate) = year(cus.targetdate) ");
strsql.appendformat("                    and payswim.ckey = '{0}' ", ckey);
strsql.appendformat("               union all ");
strsql.appendformat("               select  sum(convert(float, isnull(( wp1 + wp2 + wp3 + wp4 + wp5 ), 0))) as total ");
strsql.appendformat("               from   warepaymentcontent as ware ");
strsql.appendformat("               where   year(paydate) = year(cus.targetdate) ");
strsql.appendformat("                    and ware.ckey = '{0}' ", ckey);
strsql.appendformat("              ) b ");
strsql.appendformat("         ), 0))) as 年实收总金额 , ");
strsql.appendformat("      year(targetdate) 年 ");
strsql.appendformat("  from  dbo.customerbase cus ");
strsql.appendformat("  group by year(targetdate) ");
#endregion
}
#endregion
datatable table = dbhelper.getdatetable(strsql.tostring());
string rs = newtonsoft.json.jsonconvert.serializeobject(table);
return rs;
}

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐