我正在尝试编写一个可用作“运行查询”的查询,其中它会提取当月的数据。查询是每月提取发票信息进行审查,我们有一个会计日历,我已经加入了该日历,因此发票与会计月份和年份相关联。我的查询是跨 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')
结果返回时,三月会计月份的所有发票都正确
为什么在 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 (...)