34,590
社区成员
发帖
与我相关
我的任务
分享
select
sum(a.售出数量*售出价格) as price,
SUM(a.售出数量*进货价格) as BasePrice,
CONVERT(varchar(7),a.售出日期,120) as CurMonth
from a inner joinb
on a.商品ID=b.id
where CONVERT(varchar(4),a.售出日期,120)='2011'
group by CONVERT(varchar(7),a.售出日期,120)
order by CONVERT(varchar(7),a.售出日期,120) desc
DECLARE @dt DATETIME
SET @dt='2011-01-01'
;WITH a AS
(SELECT @dt AS dt1,DATEADD(m,1,@dt) AS dt2
UNION ALL
SELECT DATEADD(m,1,dt1),DATEADD(m,2,dt1) FROM a WHERE dt1<DATEADD(yy,1,@dt)
)
SELECT
sum(a.售出数量*售出价格) as price,
SUM(a.售出数量*进货价格) as BasePrice,
CONVERT(varchar(7),a.dt1,120) as CurMonth
FROM
a
LEFT JOIN
(a2 INNER JOIN b ON a2.商品ID=b.ID) ON a2.售出日期 >= a.dt1 AND a2.售出日期 <a.dt2
GROUP BY CONVERT(varchar(7),a.dt1,120)
ORDER BY CurMonth desc
DECLARE @dt DATETIME
SET @dt='2011-01-01'
;WITH a AS
(SELECT @dt AS dt1,@dt+' 23:59:59' AS dt2
UNION ALL
SELECT DATEADD(m,1,dt1),DATEADD(m,1,dt1+' 23:59:59') FROM a WHERE dt1<DATEADD(yy,1,@dt)
)
SELECT
sum(a.售出数量*售出价格) as price,
SUM(a.售出数量*进货价格) as BasePrice,
CONVERT(varchar(7),a.dt1,120) as CurMonth
FROM
a
LEFT JOIN
(a2 INNER JOIN b ON a2.商品ID=b.ID) ON a2.售出日期 BETWEEN a.dt1 AND a.dt2
GROUP BY CONVERT(varchar(7),a.dt1,120)
ORDER BY CurMonth desc
--2的话要做个1-12的表,调整下然后left join下
--PS:这个好像没别的好优化了,坐等大神
--1 and 简单优化 售出日期上要建立索引
select
CONVERT(varchar(7),a.售出日期,120) as CurMonth,
convert(decimal(18,3),sum(a.售出数量*售出价格)) as price,
convert(decimal(18,3),sum(a.售出数量*进货价格)) as BasePrice
from a inner join b on (a.商品ID=b.id)
where a.售出日期>='2011-1-1' and a.售出日期<'2012-1-1'
group by CONVERT(varchar(7),a.售出日期,120)
order by 1 desc
;with aaa as
(select cast('2011-'+case when LEN(number)=1 then '0'+CAST(number as varchar) else CAST(number as varchar) end+'-01' as datetime) as StartDate,
DATEADD(DAY,-1,DATEADD(MONTH,1,cast('2011-'+case when LEN(number)=1 then '0'+CAST(number as varchar) else CAST(number as varchar) end+'-01' as datetime))) as EndDate
from master.dbo.spt_values
where type='P'
and number between 1 and 12)
select
CONVERT(varchar(7),c.StartDate,120) as CurMonth,
convert(decimal(18,3),isnull(sum(a.售出数量*售出价格),0)) as price,
convert(decimal(18,3),isnull(sum(a.售出数量*进货价格),0)) as BasePrice
from a inner join b on (a.商品ID=b.id)
right join aaa as c on a.售出日期>=c.StartDate and a.售出日期<=c.EndDate
group by CONVERT(varchar(7),c.StartDate,120)
order by CurMonth
;with aaa as
(select cast('2011-'+case when LEN(number)=1 then '0'+CAST(number as varchar) else CAST(number as varchar) end+'-01' as datetime) as StartDate,
DATEADD(DAY,-1,DATEADD(MONTH,1,cast('2011-'+case when LEN(number)=1 then '0'+CAST(number as varchar) else CAST(number as varchar) end+'-01' as datetime))) as EndDate
from master.dbo.spt_values
where type='P'
and number between 1 and 12)
select
CONVERT(varchar(7),a.售出日期,120) as CurMonth,
convert(decimal(18,3),isnull(sum(a.售出数量*售出价格),0)) as price,
convert(decimal(18,3),isnull(sum(a.售出数量*进货价格),0)) as BasePrice
from a inner join b on (a.商品ID=b.id)
inner join aaa as c on a.售出日期>=c.StartDate and a.售出日期<=c.EndDate
group by CONVERT(varchar(7),a.售出日期,120)
order by CurMonth