⑴ sql按月分组,没有月份的数据如何显示为0
<=12
以上是oracle的写法核蠢。sql server可以用row_number() over(order by XXX)也可实现。
可以用上述虚拟列出的表格数据,与你的语句进行左连接,NVL空值设置为0即可。
你的WHERE语句没有问题。如果要用GROUP BY优化的话,可能需要用到复杂的数据库分析函数,这些分析函数衡尘用起来也比较费劲啊。。。咐氏禅
⑵ sql里面根据月份分组显示,急!!!
问题一:
SELECT商品名称,SUM(casewhenmonth(销售日期)=1then销售数量else0end)1月,
SUM(casewhenmonth(销售日期)=2then销售数量else0end)2月,
SUM(casewhenmonth(销售日期)=3then销售数量else0end)3月,
SUM(casewhenmonth(销售日期)=4then销售数量else0end)4月,
SUM(casewhenmonth(销售日期)=5then销售数量else0end)5月,
SUM(casewhenmonth(销售日期)=6then销售数量else0end)6月,
SUM(casewhenmonth(销售日期)=7then销售数量else0end)7月
FROM表一
groupby商品名称
问题二:
CREATEPROCP1AS
SELECT商品名称,SUM(casewhenmonth(销售日期)=1then销售数量else0end)1月,
SUM(casewhenmonth(销售日期)=2then销售数量else0end)2月,
SUM(casewhenmonth(销售日期)=3then销售数量else0end)3月,
SUM(casewhenmonth(销售日期)=4then销售数量else0end)4月,
SUM(casewhenmonth(销售日期)=5then销售数量else0end)5月,
SUM(casewhenmonth(销售日期)=6then销售数量else0end)6月,
SUM(casewhenmonth(销售日期)=7then销售数量else0end)7月
FROM表一
groupby商品名称
⑶ sql 实现按日期分组
需要用convert函数转换日期格式,并且需要用group by来实现分组。
1、创建测试表及插入数据:
createtabletest
(tdatedatetime,
salint);
insertintotestvalues('2015-09-2312:22:22',100);
insertintotestvalues('2015-09-2301:54:34',456);
insertintotestvalues('2015-09-2414:32:35',45);
insertintotestvalues('2015-09-2422:23:43',67);
insertintotestvalues('2015-09-2519:43:22',234);
insertintotestvalues('2015-09-2508:14:12',67);
insertintotestvalues('2015-09-2604:53:34',45);
insertintotestvalues('2015-09-2609:46:54',78);
2、执行sql语句:
selectconvert(varchar(10),tdate,120)tdate,sum(sal)salfromtestgroupbyconvert(varchar(10),tdate,120);
3、执行结果: