SQL 查询根据当月会计月份填充当月发票数据

问题描述 投票:0回答:1

我正在尝试编写一个可用作“运行查询”的查询,其中它会提取当月的数据。查询是每月提取发票信息进行审查,我们有一个会计日历,我已经加入了该日历,因此发票与会计月份和年份相关联。我的查询是跨 5 个数据库的联合,我将 where 子句放入每个联合中(5 次)

返回结果:

SELECT 
.... , 
bcal.fiscalmonthname as FiscalMonth, 
bcal.yearnbr as FiscalYr,
..... , 
CONVERT(varchar(10), CAST (bi.invoice_date AS DATE), 101) as Invoice_Date, 
.... , 
bcal.fiscalyearmonthnbr as Fiscal_Yr_Mon
FROM DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    **INNER JOIN DB1.dbo.ref_calendar_tbl AS bcal ON bi.invoice_date = bcal.date**
    INNER JOIN DB1....
        INNER JOIN DB1....                                                       
        INNER JOIN DB1....                               
        INNER JOIN DB1....                                           
        INNER JOIN DB1....  
        INNER JOIN Server2.DB3....

WHERE **bcal.fiscalyearmonthnbr IN ('2024-03')** AND ....

GROUP BY ....

UNION

SELECT 
.... , 
tbcal.fiscalmonthname as FiscalMonth, 
tbcal.yearnbr as FiscalYr,
 ..... ,
CONVERT(varchar(10), CAST (tbi.invoice_date AS DATE), 101) as Invoice_Date,
..... ,  
tbcal.fiscalyearmonthnbr as Fiscal_Yr_Mon
FROM DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    **INNER JOIN DB2.dbo.ref_calendar_tbl AS tbcal ON tbi.invoice_date = tbcal.date**
    INNER JOIN DB2....
    INNER JOIN DB2....                                                               
        INNER JOIN DB2....                                                           
        INNER JOIN DB2....                                                           
        INNER JOIN DB2....
        INNER JOIN Server2.DB3...
WHERE ** tbcal.fiscalyearmonthnbr IN ('2024-03')** AND ....
GROUP BY ....

ORDER BY Prod_Group ASC,
     mill_id ASC,
     Company_Customer ASC,
     Mill_Invoice# ASC

使用相关会计年度月份的结果是正确的

Invc_日期 财政_Yr_Mon
2024 年 2 月 25 日 2024-03
2024 年 2 月 26 日 2024-03
2024 年 3 月 2 日 2024-03

没有结果:

SELECT 
.... , 
bcal.fiscalmonthname as FiscalMonth, 
bcal.yearnbr as FiscalYr, 
..... , 
CONVERT(varchar(10), CAST (bi.invoice_date AS DATE), 101) as Invoice_Date, 
.... , 
bcal.fiscalyearmonthnbr as Fiscal_Yr_Mon
FROM DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    INNER JOIN DB1....
    **INNER JOIN DB1.dbo.ref_calendar_tbl AS bcal ON bi.invoice_date = bcal.date**
    INNER JOIN DB1....
        INNER JOIN DB1....                                                       
        INNER JOIN DB1....                               
        INNER JOIN DB1....                                           
        INNER JOIN DB1....  
        INNER JOIN Server2.DB3....

WHERE **bcal.fiscalyearmonthnbr IN (FORMAT(GETDATE(),'YYYY-MM'))** AND ....

GROUP BY ....

UNION

SELECT 
.... , 
tbcal.fiscalmonthname as FiscalMonth, 
tbcal.yearnbr as FiscalYr, 
..... ,
CONVERT(varchar(10), CAST (tbi.invoice_date AS DATE), 101) as Invoice_Date, 
..... ,  
tbcal.fiscalyearmonthnbr as Fiscal_Yr_Mon
FROM DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    INNER JOIN DB2....
    **INNER JOIN DB2.dbo.ref_calendar_tbl AS tbcal ON tbi.invoice_date = tbcal.date**
    INNER JOIN DB2....
    INNER JOIN DB2....                                                               
        INNER JOIN DB2....                                                           
        INNER JOIN DB2....                                                           
        INNER JOIN DB2....
        INNER JOIN Server2.DB3...
WHERE **tbcal.fiscalyearmonthnbr IN (FORMAT(GETDATE(),'YYYY-MM'))** AND ....
GROUP BY ....

ORDER BY ...

期望:当查询在三月份运行时,它只返回三月份会计月份的发票,当查询在四月份运行时,它只返回四月份会计月份的发票,依此类推。

尝试使用

WHERE bcal.fiscalyearmonthnbr IN (FORMAT(GETDATE(),'YYYY-MM'))
,但没有返回任何结果(也没有错误消息)

当我使用

WHERE bcal.fiscalyearmonthnbr IN ('2024-03')
结果返回时,三月会计月份的所有发票都正确

sql sql-server sqlcommand
1个回答
0
投票

为什么在 WHERE 子句中使用 FORMAT 函数?

我将替换当前月份的 CONVERT(varchar(7), GETDATE(), 120),而不是使用 FORMAT(GETDATE(),'YYYY-MM')。

更换:

WHERE bcal.fiscalyearmonthnbr IN (FORMAT(GETDATE(),'YYYY-MM')) AND (...)

与:

WHERE bcal.fiscalyearmonthnbr IN (CONVERT(varchar(7), GETDATE(), 120)) AND (...)

并更换

WHERE tbcal.fiscalyearmonthnbr IN (FORMAT(GETDATE(),'YYYY-MM')) AND (...)

与:

WHERE tbcal.fiscalyearmonthnbr IN (CONVERT(varchar(7), GETDATE(), 120)) AND (...)
© www.soinside.com 2019 - 2024. All rights reserved.