我有一个将返回列的查询:
StoreNo
财政周刊
SalesVar
有28家商店,
和财政周是25 - 30,
销售额是该周销售额差异的总和
我想在子查询中包含这个,它将为我提供输出:
StoreNo
LinearRegression(基于6周销售历史[已知Y])
我通常只使用LINEST
在Excel中执行此操作我猜它会是这样的:
Select
A.StoreNo
A.LinearRegressionCalculation
From (SubQuery) A
我用来获取6周销售历史的查询是:
SELECT
EU.[Store No] As 'StoreNo'
,SA.FISCALWEEK As 'FiscalWeek'
,CONVERT(DECIMAL(5,4),
( SUM(CASE WHEN SA.FISCALYEAR = 2017 THEN SA.SALESEXVAT/SA.EXCHANGERATEEURO END) /
SUM(CASE WHEN SA.FISCALYEAR = 2016 THEN SA.SALESEXVAT/SA.EXCHANGERATEEURO END) ) -1) AS 'SalesVar'
FROM
[BHXSQL2014-DEV].BMANALYTICS.DBO.EUACTIVESTORES AS EU
INNER JOIN
[EUUKSQL01].[DASHBOARD].[DBO].[SALESAGGREGATEWEEK] AS SA
ON
EU.[Store No] = SA.BRANCHNO
And EU.[Store No] In (
8702,8711,8701,4167,4164,4160,4169,4155,4794,4746,1701,4619,4617,8867,8878,8891,8743,8876,4806,4710,4100,4826,4148,8757,8866,8787,8821,8756
)
And SA.Fiscalweek between 25 and 30
--COMP FLAG (Y=COMP WEEK, N=NONCOMP WEEK, 'WHERE' STATEMENT EXCLUDES NON COMP WEEKS)
AND CASE WHEN LEFT(EU.[COMP WEEK],4) < 2017 THEN 'Y'
WHEN RIGHT(EU.[COMP WEEK],2) < SA.FISCALWEEK THEN 'Y'
ELSE 'N' END
= 'Y'
GROUP BY
EU.[Store No]
,SA.FISCALWEEK
ORDER BY
EU.[Store No]
答案 0 :(得分:1)
最终解决了问题(尽管LINEST的结果很轻微)
Select
MYDATA3.StoreNo
,slope
,ybar - xbar * slope as 'Intercept'
From
( Select
MYDATA2.StoreNo
,Sum((x - xbar) * (y - ybar)) / Sum((x - xbar) * (x - xbar)) As 'Slope'
,Max(ybar) As ybar
,Max(xbar) As xbar
From
( Select
MYDATA.StoreNo
,avg(MYDATA.SalesVar) Over (Partition By MYDATA.StoreNO Order By FiscalWeek Rows Unbounded Preceding) as 'ybar'
,MYDATA.SalesVar as 'y'
,avg(MYDATA.FiscalWeek) Over(Partition By MYDATA.StoreNO Order By FiscalWeek Rows Unbounded Preceding) as 'xbar'
,MYDATA.FiscalWeek as 'x'
From
( Select
EU.[Store No] As 'StoreNo'
,SA.FISCALWEEK As 'FiscalWeek'
,Convert(DECIMAL(5,4),
( Sum(Case When SA.FISCALYEAR = 2017 Then SA.SALESEXVAT/SA.EXCHANGERATEEURO END) /
Sum(Case When SA.FISCALYEAR = 2016 Then SA.SALESEXVAT/SA.EXCHANGERATEEURO END) ) -1) As 'SalesVar'
From
[BHXSQL2014-DEV].BMANALYTICS.DBO.EUACTIVESTORES AS EU
INNER JOIN
[EUUKSQL01].[DASHBOARD].[DBO].[SALESAGGREGATEWEEK] AS SA
ON
EU.[Store No] = SA.BranchNo
And EU.[Store No] In (
8702,8711,8701,4167,4164,4160,4169,4155,4794,4746,1701,4619,4617,8867,8878,8891,8743,8876,4806,4710,4100,4826,4148,8757,8866,8787,8821,8756
)
And SA.Fiscalweek between 25 and 30
--COMP FLAG (Y=COMP WEEK, N=NONCOMP WEEK, 'WHERE' STATEMENT EXCLUDES NON COMP WEEKS)
AND Case When LEFT(EU.[COMP WEEK],4) < 2017 Then 'Y'
When RIGHT(EU.[COMP WEEK],2) < SA.FISCALWEEK Then 'Y'
Else 'N' END
= 'Y'
Group BY
EU.[Store No]
,SA.FISCALWEEK
) MYDATA ) MYDATA2
Group BY
MYDATA2.StoreNo ) MYDATA3