【问题标题】:Returning LINE with no inner join match返回没有内部连接匹配的 LINE
【发布时间】:2020-03-21 16:43:09
【问题描述】:

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

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

我尝试了解所有不同的连接,甚至尝试使用 is null、if 和 coalesce 均无济于事。

【问题讨论】:

  • 您使用的是 MySQL 还是 MS SQL Server?
  • 这个 SQL 方言与 SQL Server 有效语法相关,而不是 MySQL 有效语法。所以我删除了那个 MySQL 标签
  • MS SQL Server,帖子要求我标记 5 件事。我很抱歉。
  • @ameloise 。 . .您不需要五个标签。这是上限。

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


【解决方案1】:
...................
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 ....)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2015-06-08
    • 2021-08-23
    相关资源
    最近更新 更多