常用的计算物业
SQLSERVER 常用KPI的计算.
SQL code
--基本上没有用SQL写过KPI,在里有人问起,觉得用SQL试试,呵呵.
--本文只是抛砖引玉.欢迎参观.
create table Timer (
DTE_Date DateTime Not null,
Int_Year int not null,
Int_Q Int Not null,
Int_M Int Not null,
Int_D Int Not null
CONSTRAINT [PK_Timer] PRIMARY KEY
(
DTE_Date ASC
))
go
DECLARE @DTE_BEGDATE DATETIME
抱得美人归?一个农村愤青双拳敌四手的爱情保卫战 SET @DTE_BEGDATE=\"\"
WHILE @DTE_BEGDATE= \"\" BEGIN
INSERT INTO Timer VALUES(@DTE_BEGDATE,YEAR(@DTE_BEGDATE),
CASE WHEN MONTH (@DTE_BEGDATE)=1 AND MONTH (@DTE_BEGDATE)=3 THEN 1
WHEN MONTH (@DTE_BEGDATE)=4 AND MONTH (@DTE_BEGDATE)=6 THEN 2
WHEN MONTH (@DTE_BEGDATE)=7 AND MONTH (@DTE_BEGDATE)=9 THEN 3
WHEN MONTH (@DTE_BEGDATE)=10 AND MONTH (@DTE_BEGDATE)=12 THEN 4
END
,MONTH (@DTE_BEGDATE),DAY(@DTE_BEGDATE) )
SET @DTE_BEGDATE =DATEADD (DAY,1,@DTE_BEGDATE)
END
GO
-----------------------------------------
--建立测试业务表
-----------------------------------------
CREATE TABLE BILL_SELL(
DTE_DATETIME DATETIME,
VAR_BILLID VARCHAR(32),
VAR_PRODUCT VARCHAR(64),
INT_AMOUNT INT,
INT_MONEY INT
CONSTRAINT [PK_BILL_SELL] PRIMARY KEY
(
VAR_BILLID ASC
))
CREATE INDEX IX_SELL_DATETIME ON BILL_SELL (DTE_DATETIME)
GO
-----------------------------------------
--填充业务表.
-----------------------------------------
DECLARE @DTE_BEGDATE DATETIME
DECLARE @Int_BillID Int
SET @Int_BillID=1
SET @DTE_BEGDATE=\"\"
WHILE @DTE_BEGDATE= \"\" BEGIN
INSERT INTO BILL_SELL VALUES(@DTE_BEGDATE, @Int_BillID,LEFT(NEWID(),1),RAND() * 1000,RAND()*1000 )
SET @Int_BillID=@Int_BillID+1
SET @DTE_BEGDATE =DATEADD (DAY,1,@DTE_BEGDATE)
END
GO
/**************************************/
--1.建立中间表.
CREATE TABLE JX_TAB (
Int_Year int null,
Int_Q Int null,
Int_M Int null,
Int_D Int null,
INT_AMOUNT FLOAT NULL,
INT_MONEY FLOAT NULL,
)
CREATE INDEX IX_T_YEAR ON JX_TAB(INT_YEAR)
CREATE INDEX IX_T_Q ON JX_TAB(Int_Q)
CREATE INDEX IX_T_M ON JX_TAB(Int_M)
CREATE INDEX IX_T_D ON JX_TAB(Int_D)
GO
-------------------------------------
-- 计算同比(年,季,月).
-------------------------------------
--2.将数据 按统计时间 抽到中间表.
INSERT INTO JX_TAB
SELECT _Year ,_Q ,NULL,NULL,SUM(INT_AMOUNT),SUM(INT_MONEY) --因为是统计季度,所以 月 和 天 是 NULL
FROM
( SELECT YEAR(DTE_DATETIME) AS Int_Year
,CASE WHEN MONTH (DTE_DATETIME)=1 AND MONTH (DTE_DATETIME)=3 THEN 1
WHEN MONTH (DTE_DATETIME)=4 AND MONTH (DTE_DATETIME)=6 THEN 2
WHEN MONTH (DTE_DATETIME)=7 AND MONTH (DTE_DATETIME)=9 THEN 3
WHEN MONTH (DTE_DATETIME)=10 AND MONTH (DTE_DATETIME)=12 THEN 4
END AS Int_Q
,MONTH (DTE_DATETIME) AS Int_M
,DAY(DTE_DATETIME) AS Int_D
,INT_AMOUNT
,INT_MONEY
FROM BILL_SELL ) AS A
GROUP BY Int_Year,Int_Q
GO
--3.计算同比,计算 月,日,周 的,依次类推.
SELECT _Year ,_Q , (_MONEY _MONEY )/_MONEY AS 季同比
FROM JX_TAB AS A INNER JOIN JX_TAB AS B ON _Year=_Year-1 AND _Q=_Q
-------------------------------------
-- 计算环比(年,季,月)
-------------------------------------
SELECT _Year ,_Q , (_MONEY _MONEY )/_MONEY AS 季环比
FROM JX_TAB AS A INNER JOIN JX_TAB AS B ON _Year=_Year AND _Q=_Q-1
-------------------------------------
-- 计算YTD/MTD/QTD
-- YTD 是年的第一天开始到年的最后一天的累计值.
-- MTD 是某年的某月的第一天开始到某年该月的最后一天的累计值.
-- QTD 是某年的某季的第一天开始到某年该季的最后一天的累计值.
-- 这几个都是累计值 . 知道了概念后,在原表就可以求出.不举例子了.
-------------------------------------
--其它的,如 总体贡献度,父子贡献度,受欢迎程度 等等,可以用类拟的方法求出.
老人类风湿关节疼痛可以缓解吗白山治白癜风哪家医院好
贵阳治疗妇科好方法
-
川博携手济源研究院举办“张大千临摹济源壁画研究”学术交流会
川博携手玄奘研究学术研究院举办“名家真迹玄奘画先为研究学术研究”学术...
2024-03-27
-
️来自霍格沃茨的趣味魔法编程让应用程序耕于心田,令魔法绽于指尖。影子老师全新力作,众人翘首以待,下周
...
2024-01-08
-
美元霸权陨落?俄气27个买家开设卢布帐户,美元对卢布跌破59大关
这些年,American几日挥舞着“美元大棒”,不是威胁这个第三世界,就是击打...
2023-12-09
-
关乎大资金动向!科创板“芯片”指数来了,42只样本股名单公布;上交所几大指数也调整,腾讯、美团等权重
A股、公司股票多个极其重要指标公布或修正,这意味着之外的大资金样式也...
2023-11-27
-
"零售之王"换帅出炉!27年"老招行"王良接棒,保持战略执行不偏移、不动摇
“批发人就时会”换帅出炉! 采访授予悉,5翌年19日下午,招商银行业召开...
2023-11-19
-
世界顶尖风景大片,愤慨心灵的万年奇观!
有着大树平滑的一块,好不可思议纵使后新生命以痛吻我,我仍报之以歌万丈...
2023-11-18