㈠ sql 按照小时分组查询并统计
--模拟销售的表.
CREATETABLE#temp(
[销售时间]datetime,
[销量]int,
[实销]int
)
go
--由于成本与毛利,我估计应该是在另外一个表里面的,这里就不模拟了
INSERTINTO#temp
--9点的
SELECT'2013-07-1609:55:15',9,900UNIONALL
--10点的
SELECT'2013-07-1610:15:15',1,100UNIONALL
SELECT'2013-07-1610:25:15',15,1500UNIONALL
SELECT'2013-07-1610:35:15',10,1000UNIONALL
--11点的
SELECT'2013-07-1611:15:15',1,100UNIONALL
SELECT'2013-07-1611:25:15',2,200UNIONALL
SELECT'2013-07-1611:35:15',3,300UNIONALL
SELECT'2013-07-1611:45:15',4,400UNIONALL
SELECT'2013-07-1611:55:15',5,500UNIONALL
--其他的.
SELECT'2013-07-1612:15:15',12,1200UNIONALL
SELECT'2013-07-1613:15:15',13,1300UNIONALL
SELECT'2013-07-1614:15:15',14,1400UNIONALL
--中间缺少15点与16点的
SELECT'2013-07-1617:15:15',17,1700UNIONALL
SELECT'2013-07-1618:15:15',18,1800;
goSELECT
ISNULL(Convert(varchar(2),sv.number)+'-'+Convert(varchar(2),sv.number+1),'合计')AS[销售时段],
SUM([销量])AS[销量],
SUM([实销])AS[实销],
(SELECTSUM([实销])FROM#tempt2WHEREDATEPART(hh,t2.[销售时间])<=ISNULL(sv.number,23))AS[累计实销]
FROM
master..spt_valuessv
JOIN#tempt
ON(sv.number=DATEPART(hh,t.[销售时间]))
WHERE
sv.type='P'
ANDsv.number>=9
ANDsv.number<20
GROUPBY
sv.numberWITHrollup
GO
销售时段销量实销累计实销
--------------------------------------
9-109900900
10-112626003500
11-121515005000
12-131212006200
13-141313007500
14-151414008900
17-1817170010600
18-1918180012400
合计1241240012400
(9行受影响)
这样行么?
㈡ SQL分组求和
--count(c.proId) 也可能换成 未显示的字段 sum(c.qty) 数量之和
selecta.specId,a.specName,count(c.proId)as'销量'
.specId=b.specId
innerjoinorderconb.proId=c.proId
wherecreateTime<=dateadd(month,-1,getdate())
groupbya.specId,a.specName
union
selecta.specId,a.specName,count(c.proId)as'销量'
.specId=b.specId
innerjoinorderconb.proId=c.proId
wherecreateTime<=dateadd(month,-2,getdate())
groupbya.specId,a.specName
union
selecta.specId,a.specName,count(c.proId)as'销量'
.specId=b.specId
innerjoinorderconb.proId=c.proId
wherecreateTime<=dateadd(month,-3,getdate())
groupbya.specId,a.specName
--或者
selectt1.specId,t1.specName,
t1.[1个月前的销量],t2.[2个月前的销量],t3.[3个月前的销量]from
(selecta.specId,a.specName,count(c.proId)as'1个月前的销量'
.specId=b.specId
innerjoinorderconb.proId=c.proId
wherecreateTime<=dateadd(month,-1,getdate())
groupbya.specId,a.specName)t1,
(selecta.specId,a.specName,count(c.proId)as'2个月前的销量'
.specId=b.specId
innerjoinorderconb.proId=c.proId
wherecreateTime<=dateadd(month,-2,getdate())
groupbya.specId,a.specName)t2,
(selecta.specId,a.specName,count(c.proId)as'3个月前的销量'
.specId=b.specId
innerjoinorderconb.proId=c.proId
wherecreateTime<=dateadd(month,-3,getdate())
groupbya.specId,a.specName)t3
wheret1.specId=t2.specIdandt1.specName=t2.specName
andt3.specId=t2.specIdandt3.specName=t2.specName
andt1.specId=t3.specIdandt1.specName=t3.specName
--andt1.specNamein('A','B','C','D')--根据需要再次过滤
㈢ sql语句实现分组统计
方法和详细的操作步骤如下:
1、第一步,创建一个测试表,详细代码见下图,转到下面的步骤。
㈣ sql 20051、 对订单信息表按照销售部门进行分组统计,即求出每个销售部门的销售数量,统计的
统计
select 部门编号,部门名称,(select sum(数量) from 销售表 as b where b.部门编号 = a.部门编号) from 部门表 group by 部门编号
订单
订单应分订单主表、订单子表等
主表为供应商、日期、订货部门和人员等,
子表为商品信息、单价、数量、到货日期等
如果有请购表,需要对应关联。
因为不知道你的具体业务,只能说明思路,具体语句不难。
开始事务
写主表
循环写子表
调整请购表等的信息
结束事务
注意有错误处理语句和事务回滚语句。
业务流程,通用内容可参照网络搜索的《企业内部控制应用指引第7号——采购业务》
㈤ 一个日销售量的表格,用plsql把表格的数据按照相同年月的分组,并统计月销售量
SELECT to_char(销售日期,
'YYYY-MM') 月份,
SUM(数量) 每月销售量
FROM 销售明细表
GROUP BY to_char(销售日期,
'YYYY-MM')
㈥ SQL销售日报表分组排序问题,请高手指导,谢谢。。。
你要怎么分组? 能把需求说的明白点吗?
给你写一个类似的例子 你自己还得动动脑筋 需要的知识我帮你解决了
Select CASE WHEN
GROUPING(FItemNumber)=1
THEN 'Total:' ELSE
FItemNumber END as FItemNumber
,CASE WHEN GROUPING(Fdate)=1 THEN 'State Total:' ELSE Fdate END as Fdate
,Sum(FSaleQty) AS FSaleQty ,Sum(FAmount) AS FAmount ,Sum(FGain) AS FGain
From T_ItemSale
GROUP BY
ROLLUP(Fdate,FItemNumber)
㈦ SQL查询各商品的销售情况,列出商品名,商品单价,总价,并按总销售量降序排序
1、首先打开SQL Server Management管理工具,运用Select语句查询出要排序的数据,如下图所示。