【发布时间】: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