With T
創(chuàng)新互聯(lián)建站一直通過(guò)網(wǎng)站建設(shè)和網(wǎng)站營(yíng)銷(xiāo)幫助企業(yè)獲得更多客戶(hù)資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以網(wǎng)站制作、網(wǎng)站建設(shè)、移動(dòng)互聯(lián)產(chǎn)品、成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)服務(wù)為核心業(yè)務(wù)。10年網(wǎng)站制作的經(jīng)驗(yàn),使用新網(wǎng)站建設(shè)技術(shù),全新開(kāi)發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價(jià)格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡(jiǎn)單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。
As
(
Select ID,結(jié)束月,相差月 From TT
Union All
Select T.ID,Dateadd(M,-1,T.結(jié)束月),T.相差月-1 From TT Inner Join T On
TT.id=T.id Where T.相差月1
)
Select ID,結(jié)束月 From T
Order By id,結(jié)束月
--TT是你的表名
--SQL2005或以上版本
怎么改題目了?搞的我還把開(kāi)始的要求給算出來(lái)了,如下:
select
a.月份,
a.本月收入總額,
case when b.本月收入總額=0 or b.本月收入總額 IS null then null else
(a.本月收入總額-b.本月收入總額)/b.本月收入總額*100 end 收入增長(zhǎng)百分比,
a.本月支出總額,
case when b.本月支出總額=0 or b.本月支出總額 IS null then null else
(a.本月支出總額-b.本月支出總額)/b.本月支出總額*100 end 支出增長(zhǎng)百分比,
a.本月余額,
case when b.本月余額=0 or b.本月余額 IS null then null else
(a.本月余額-b.本月余額)/b.本月余額*100 end 余額增長(zhǎng)百分比
from
(
select
MONTH(日期) 月份,
isnull(SUM(收入金額),0) 本月收入總額,
isnull(SUM(支出金額),0) 本月支出總額,
isnull(SUM(收入金額),0)-isnull(SUM(支出金額),0) 本月余額
from 收支表
group by MONTH(日期)
) a
left join
(
select
MONTH(日期) 月份,
isnull(SUM(收入金額),0) 本月收入總額,
isnull(SUM(支出金額),0) 本月支出總額,
isnull(SUM(收入金額),0)-isnull(SUM(支出金額),0) 本月余額
from 收支表
group by MONTH(日期)
) b
on a.月份=b.月份+1
order by a.月份 desc
搞到最后才發(fā)現(xiàn)你是ACCESS數(shù)據(jù)庫(kù),暈死,那以上SQL Server 代碼可能有些地方要修改
比如:case when then else end語(yǔ)句,不知ACCESS是否支持;
left join可能要改成left outer join;
isnull()函數(shù),不知access是否支持;
month()函數(shù),不知access是否支持;
用ACCESS完成這么復(fù)雜的運(yùn)算,的確困難.
補(bǔ)充,用case主要是用來(lái)排除0和空值,比如,你6月份的收入為0,7月份的收入3500,那么收入增長(zhǎng)百分比就是3500/0,結(jié)果是無(wú)窮大,你在ACCESS中怎么排除這種情況?
select * from xxxx where datediff(m,dt1,dt2)
datediff:日期比較函數(shù),SQL server自帶的,會(huì)將比較的兩個(gè)日期比較部分的差值返回,m表示比較月
SQL 同期對(duì)比月?
這個(gè) 同期的期, 是 年? 半年? 還是季度?
如果是年的話(huà)。就是 用 需要比較的日期 減去一年的 操作來(lái)處理。
如果是 半年的話(huà), 用 需要比較的日期 減去6個(gè)月的 操作來(lái)處理。
如果是 季度的話(huà), 用 需要比較的日期 減去3個(gè)月的 操作來(lái)處理。
至于 日期如何減 , 例如減少 6 個(gè)月。
Oracle 使用 ADD_MONTHS( 日期, -6 )
SQL Server 使用 DATEADD( mm, 日期, -6 )
MySQL 使用 DATE_SUB( 日期, INTERVAL 6 MONTH)
至于 如何多個(gè)字段確定一條數(shù)據(jù)。
這個(gè)不大清楚你的表是如何設(shè)計(jì)的。
一般情況下,是一個(gè)主鍵確定一條數(shù)據(jù)。
CREATE TABLE test_liupeng841121(
name VARCHAR(10),
year INT,
month INT,
sl INT
);
go
INSERT INTO test_liupeng841121
SELECT '福田', 2010, 11, 72 UNION ALL
SELECT '東本', 2010, 11, 85 UNION ALL
SELECT '古田', 2010, 11, 123 UNION ALL
SELECT '福田', 2010, 12, 96 UNION ALL
SELECT '東本', 2010, 12, 34 UNION ALL
SELECT '福田', 2011, 1, 78
go
SELECT
T_Now.name AS 名稱(chēng),
T_Now.year AS 年,
T_Now.month AS 月,
T_Now.sl AS 當(dāng)月數(shù)據(jù),
T_Prev.sl AS 上月數(shù)據(jù)
FROM
test_liupeng841121 T_Now LEFT JOIN
test_liupeng841121 T_Prev
ON (
T_Now.name = T_Prev.name
AND (
(T_Now.year = T_Prev.year AND T_Now.month = T_Prev.month + 1)
OR
(T_Now.year = T_Prev.year + 1 AND T_Now.month = 1 AND T_Prev.month = 12)
)
)
ORDER BY
T_Now.name, T_Now.year, T_Now.month
month(getdate())-month(createdate)-(case when day(getdate())day(createdate) then 1 else 0 end)
可以完成,思路如下:
通過(guò)pid 商品編碼分組,得到銷(xiāo)售日期的每個(gè)月列,后用sum(case?Fact_m?WHEN?月份 then?數(shù)量end)來(lái)操作即可.
--年度售額:
select?pid?商品編碼
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'01'?then?cCost?end)),0)?'countCost_1'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'02'?then?cCost?end)),0)?'countCost_2'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'03'?then?cCost?end)),0)?'countCost_3'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'04'?then?cCost?end)),0)?'countCost_4'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'05'?then?cCost?end)),0)?'countCost_5'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'06'?then?cCost?end)),0)?'countCost_6'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'07'?then?cCost?end)),0)?'countCost_7'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'08'?then?cCost?end)),0)?'countCost_8'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'09'?then?cCost?end)),0)?'countCost_9'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'10'?then?cCost?end)),0)?'countCost_10'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'11'?then?cCost?end)),0)?'countCost_11'
,isnull(convert(dec(18,2),sum(case?Fact_m?WHEN?'12'?then?cCost?end)),0)?'countCost_12'
,isnull(convert(dec(18,2),sum(cCost)))?'countTotal'?
from?Tab?group?by?pid?
--Fact_m?指的就是銷(xiāo)售日期[月],最后還有一列為年度總計(jì)
希望能幫到你!