SQL 求同比 環(huán)比

一、要求

1、表結(jié)構(gòu)如下:

ID??DepartName(部門) Sales(銷售量) SalesDate(銷售日期)

1? ?? ?營銷一部? ?? ? 300? ?? ?? ?? ???2006-7-1

2? ?? ?營銷二部? ?? ? 500? ?? ?? ?? ???2006-7-1

3? ?? ?營銷三部? ?? ? 800? ?? ?? ?? ???2006-8-1

4? ?? ?營銷一部? ?? ? 600? ?? ?? ?? ???2006-8-1

5? ?? ?營銷二部? ?? ? 800? ?? ?? ?? ???2006-8-1

6? ?? ?營銷一部? ?? ? 400? ?? ?? ?? ???2007-7-1

7? ?? ?營銷二部? ?? ? 800? ?? ?? ?? ???2007-7-1

8? ?? ?營銷三部? ?? ? 700? ?? ?? ?? ???2007-8-1

9? ?? ?營銷一部? ?? ? 600? ?? ?? ?? ???2008-7-1

10? ???營銷二部? ?? ? 300? ?? ?? ?? ???2008-7-1

2、要根據(jù)要求得到以下數(shù)據(jù)

1)得到同比數(shù)據(jù)

部門??對比年月 本月銷售總量??去年同期銷售總量 同比

營銷一部 2006-07-01 300.00??NULL??無窮大

營銷二部 2006-07-01 500.00??NULL??無窮大

營銷三部 2006-08-01 800.00??NULL??無窮大

營銷一部 2006-08-01 600.00??NULL??無窮大

營銷二部 2006-08-01 800.00??NULL??無窮大

營銷一部 2007-07-01 400.00??300.00??33.33%

營銷二部 2007-07-01 800.00??500.00??60.00%

營銷三部 2007-08-01 700.00??800.00??-12.50%

營銷一部 2008-07-01 600.00??400.00??50.00%

營銷二部 2008-07-01 700.00??800.00??-12.50%

(2)選擇月份 獲取環(huán)比數(shù)據(jù)

部門??對比年月 本月銷售總量??上月銷售總量 環(huán)比

營銷一部 2006-07-01 300.00??NULL??無窮大

營銷二部 2006-07-01 500.00??NULL??無窮大

營銷三部 2006-08-01 800.00??NULL??無窮大

營銷一部 2006-08-01 600.00??300.00??100.00%

營銷二部 2006-08-01 800.00??500.00??60.00%

營銷一部 2007-07-01 400.00??NULL??無窮大

營銷二部 2007-07-01 800.00??NULL??無窮大

營銷三部 2007-08-01 700.00??NULL??無窮大

營銷一部 2008-07-01 600.00??NULL??無窮大

營銷二部 2008-07-01 700.00??NULL??無窮大

二、代碼:

1、創(chuàng)建表

CREATE TABLE SalesDetail(

ID int,? ?--序號

DepartName varchar(50), --部門

Sales decimal(10,2), --銷售量

SalesDate Datetime --銷售日期

)

2、插入測試數(shù)據(jù)

insert into SalesDetail(ID, DepartName, Sales, SalesDate)

select 1, '營銷一部', 300, '2006-7-1'

UNION ALL select 2, '營銷二部', 500, '2006-7-1'

UNION ALL select 3, '營銷三部', 800, '2006-8-1'

UNION ALL select 4, '營銷一部', 600, '2006-8-1'

UNION ALL select 5, '營銷二部', 800, '2006-8-1'

UNION ALL select 6, '營銷一部', 400, '2007-7-1'

UNION ALL select 7, '營銷二部', 800, '2007-7-1'

UNION ALL select 8, '營銷三部', 700, '2007-8-1'

UNION ALL select 9, '營銷一部', 600, '2008-7-1'

UNION ALL select 10, '營銷二部', 700, '2008-7-1'

3、實現(xiàn)SQL代碼

//得到環(huán)比

select c.DepartName as 部門, convert(varchar(10), c.SalesDate, 23) as 對比年月, c.Sales as 本月銷售總量, d.Sales as 上月銷售總量, case when d.Sales is null or d.Sales=0 then '無窮大' else cast(cast((isnull(c.Sales, 0)-isnull(d.Sales,0))*100/isnull(d.Sales, 0) as decimal(10,2)) as varchar(50))+'%' end as 環(huán)比 from SalesDetail c left join

(select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(month, -1, b.SalesDate) and a.DepartName=b.DepartName) d

on c.SalesDate=d.SalesDate and c.DepartName=d.DepartName

//得到同比

select c.DepartName as 部門, convert(varchar(10), c.SalesDate, 23) as 對比年月, c.Sales as 本月銷售總量, d.Sales as 去年同期銷售總量, case when d.Sales is null or d.Sales=0 then '無窮大' else cast(cast((isnull(c.Sales, 0)-isnull(d.Sales,0))*100/isnull(d.Sales, 0) as decimal(10,2)) as varchar(50))+'%' end as 同比 from SalesDetail c left join

(select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(year, -1, b.SalesDate) and a.DepartName=b.DepartName) d

on c.SalesDate=d.SalesDate and c.DepartName=d.DepartName

4、SQL語句說明

//獲取根據(jù)時間獲取去年同期時間

select DateAdd(year, -1, SalesDate)

//獲取根據(jù)時間獲取上月時間

select DateAdd(month, -1, SalesDate)

//獲取根據(jù)時間獲取去年同期時間數(shù)據(jù)

select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(year, -1, b.SalesDate) and a.DepartName=b.DepartName

//獲取根據(jù)時間獲取上月時間數(shù)據(jù)

select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(month, -1, b.SalesDate) and a.DepartName=b.DepartName

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 9,935評論 0 23
  • 5.多表查詢 多表查詢 目的:從多張表獲取數(shù)據(jù) 前提:進行連接的多張表中有共同的列 等連接 通過兩個表具有相同意義...
    喬震閱讀 1,314評論 0 0
  • 這城市那么空, 這回憶那么兇。 這秋風那么痛, 這悲傷那么濃。 蕭瑟的落葉,風月了季節(jié); 寒冷的溫暖,斑駁了歲月。...
    紫旸閱讀 562評論 0 0
  • 今天在豆瓣上看到一篇文章,寫的是自勉每天寫一篇千字文章,在第一條的建議中就提到了簡書這個網(wǎng)頁。 在認識簡書前,除了...
    focusyan閱讀 430評論 0 1
  • 看到四十天的地方,不過短短的描述,就可以很生動形象地描繪出福格先生的形象,沒有設計太多的福格先生的話語,也沒有他...
    薛定諤的mio閱讀 449評論 0 0