我需要找到每个项目的MTD(本月至今)和YTD(本年迄今)的销售价值。而且,我可以筛选出需要查找销售报告的全部数据。根据该日期,应该可以找到MTD和YTD的销售额。它应该按条形码对项目进行分组。示例:如果输入以下内容,则在过滤器中:8月21日,我应该找到当天的销售额和MTD,YTD。
当前日期可以正常工作,但是如果我除当前日期以外的任何其他日期都存在,那么MTD和YTD会有差异
SELECT Barcode,
SUM(CASE WHEN DATE = DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), -1) THEN sales_amount ELSE 0 END) AS day_1,
SUM(CASE
WHEN MONTH(date) = (MONTH(GETDATE() - 1))
AND YEAR(date) = YEAR(GETDATE() - 1) THENsales_amount
ELSE 0
END) AS month_t,
SUM(CASE
WHEN MONTH(date) = (MONTH(GETDATE() - 1))
AND YEAR(date) = YEAR(GETDATE() - 1) - 1 THEN GL_TOTALTTC
ELSE 0
END) AS lastyear_tm,
FROM sale
WHERE type = 'FFO'
AND store = 'AE001A'
AND (DATE = DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), -1)
OR ((MONTH(date) = (MONTH(GETDATE() - 1))
AND YEAR(date) = YEAR(GETDATE() - 1))
OR (MONTH(date) = (MONTH(GETDATE() - 1))
AND YEAR(date) = YEAR(GETDATE() - 1) - 1)))
GROUP BY barcode;
答案 0 :(得分:0)
您可以使用条件聚合:
select bar_code,
sum(case when date >= dateadd(day, -1, convert(date, getdate()) then sales_amount end) as yesterday,
sum(case when month(date) = month(getdate()) and year(date) = year(getdate()) then sales_amount end) as mtd,
sum(case when year(date) = year(getdate()) then sales_amount end) as ytd
from sale
where type = 'FFO' and store = 'AE001A'
group by barcode;