我正在尝试将代码的第一部分放到一起。
DECLARE @FYEND date, @YTD date, @PYTD date, @Openmonth date, @Monthtodatefrom date, @Monthtodateto date, @Priormonthdatefrom date, @Priormonthdateto date, @Currentmonth date
SET @FYEND = Dateadd(year,1,DATEADD(year,DATEDIFF(month,'19010701', getdate() ) /12,'19010701'))
SET @YTD = GETDATE()
SET @PYTD = DATEADD(YEAR,-1,@YTD)
SET @Openmonth = dateadd(DAY,1,dateadd(YEAR,-1,EOMONTH(@YTD,-1)))
SET @Monthtodatefrom = EOMONTH(getdate(),-2)
SET @Monthtodateto = Dateadd(DAY,1,eomonth(@ytd,-1))
SET @Priormonthdatefrom= DATEADD(YEAR,-1,@monthtodatefrom)
SET @Priormonthdateto= dateadd(year,-1,Dateadd(DAY,1,eomonth(@ytd,-1)))
SET @Currentmonth=dateadd(DAY,1,EOMONTH(getdate(),-1))
SELECT
b.T3,
b.Country_name,
b.Division_Name,
b.SHOP_NAME,
b.Shop_Type,
b.MTD_Result
FROM
(
SELECT
a.T3,
a.Country_name,
a.Division_Name,
a.SHOP_NAME,
a.Shop_Type,
sum(case when coa.EBIT in ('EBIT') then gl.Amount ELSE 0 END) as MTD_Result
FROM
(
SELECT
s.T3,
s.DIVISION_NAME as Division_Name,
s.SHOP_NAME,
s.COUNTRY_NAME as Country_name,
s.[Business Grouping] as Shop_Type
FROM Finance_PRD.dbo.Shops s
WHERE
s.DIVISION_NAME in ('NSWACT FCB Retail North', 'NSWACT FCB Retail South', 'Vicmania', 'The Heartland', 'SA FCB Retail', 'WANT FCB Retail', 'UT Leisure', 'TA Leisure', 'Contact Centre')
and s.BUSTYPE='ARET'
and s.[Open Date] < @Currentmonth
and s.[Close Date] is null
and s.T3 = '497088'
GROUP BY
s.T3,
s.SHOP_TYPE,
s.PRIMARY_STORE_T3,
s.DIVISION_NAME,
s.t3,
s.SHOP_NAME,
s.COUNTRY_NAME,
s.[Business Grouping],
s.BUSINESS_GROUPING_NAME,
s.SHOP_NAME) a
INNER JOIN Finance_PRD.ANZ.ConsolidatedAUD as gl
on a.T3 = gl.T3
INNER JOIN Finance_PRD.dbo.ChartOfAccounts coa
on gl.AccountCode = coa.Code
WHERE gl.Period > CASE WHEN MONTH(@Monthtodatefrom) <= 6 THEN
CONCAT(YEAR(@Monthtodatefrom), RIGHT(CONCAT('000', MONTH(@Monthtodatefrom) + 6), 3))
ELSE CONCAT(YEAR(@Monthtodatefrom) + 1, RIGHT(CONCAT('000', MONTH(@Monthtodatefrom) - 6), 3))
END and gl.Period < CASE WHEN MONTH(@Monthtodateto) <= 6 THEN
CONCAT(YEAR(@Monthtodateto), RIGHT(CONCAT('000', MONTH(@Monthtodateto) + 6), 3))
ELSE CONCAT(YEAR(@Monthtodateto) + 1, RIGHT(CONCAT('000', MONTH(@Monthtodateto) - 6), 3))
END
GROUP BY
a.T3,
a.Country_name,
a.Division_Name,
a.SHOP_NAME,
a.Shop_Type
)b
但是当我要在第二条语句上联接时,它不返回值,如果没有联接,我要求第二条语句为0。
第二部分代码是我在查询b下设置的
Inner join Finance_PRD.ANZ.ConsolidatedAUD as gl
on b.T3 = gl.T3
Inner JOIN Finance_PRD.dbo.ChartOfAccounts coa
on gl.AccountCode = coa.Code
WHERE gl.Period > CASE WHEN MONTH(@Priormonthdatefrom) <= 6 THEN
CONCAT(YEAR(@Priormonthdatefrom), RIGHT(CONCAT('000', MONTH(@Priormonthdatefrom) + 6), 3))
ELSE CONCAT(YEAR(@Priormonthdatefrom) + 1, RIGHT(CONCAT('000', MONTH(@Priormonthdatefrom) - 6), 3))
END and gl.Period < CASE WHEN MONTH(@Priormonthdateto) <= 6 THEN
CONCAT(YEAR(@Priormonthdateto), RIGHT(CONCAT('000', MONTH(@Priormonthdateto) + 6), 3))
ELSE CONCAT(YEAR(@Priormonthdateto) + 1, RIGHT(CONCAT('000', MONTH(@Priormonthdateto) - 6), 3))
END
我尝试理解所有不同的联接,甚至尝试使用null,如果并合并无济于事。
答案 0 :(得分:0)
...................
LEFT JOIN
(
Finance_PRD.ANZ.ConsolidatedAUD as gl
INNER JOIN Finance_PRD.dbo.ChartOfAccounts coa on gl.AccountCode = coa.Code
) on a.T3 = gl.T3
WHERE gl.Period IS NULL OR (gl.Period > CASE WHEN MONTH(@Monthtodatefrom) <= 6 THEN ....)