没有内部联接匹配返回LINE

时间:2019-11-26 09:44:10

标签: sql sql-server inner-join outer-join

我正在尝试将代码的第一部分放到一起。

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,如果并合并无济于事。

1 个答案:

答案 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 ....)