【发布时间】:2020-01-13 10:57:06
【问题描述】:
我有一个 SQL 查询,它根据几个选定的输入为表单创建输出;开始日期,结束日期,商店位置,它工作正常。但是,我需要将商店位置选择器从单选组合框更改为多选列表框。在前者中,我只是引用组合框字段来获取 SQL WHERE 子句的数据。在后者中,可以在列表框中选择一个或多个值,我需要 SQL 使用每个值 (OR'ed) 来获取报告的结果。
我没有尝试过,但我想我必须为每个选定的值运行 SQL,但不确定是否有更好的方法。
SELECT
Store.District
, Store.GM_name
, Store.Location
, YEAR(Sales.Date_) AS TheYear
, SUM(Sales.[Total Sales]) AS SumTotalSales
, SUM(Sales.[Cust Count]) AS SumCustCount
, SUM(Sales.[Total Sales])/SUM([Sales].[Cust Count]) AS AverageTicket
, SUM(Sales.Payroll) AS SumPayroll
, SUM(Sales.[Payroll])/SUM([Sales].[Total Sales]) AS PayrollPercent
, SUM(Sales.[Bonus Pay]) AS SumBonusPay
, SUM(Sales.[Holiday Pay]) AS SumHolidayPay
, SUM(Sales.[Vacation Pay]) AS SumVacationPay
, SUM(Sales.[Sicktime Pay]) AS SumSicktimePay
, SUM(Sales.[Cpl Cost]) AS SumCplCost
, SUM(Sales.[Cpl Cost]) /SUM([Sales].[Total Sales]) AS CPLCostPct
, SUM(Sales.[Holiday Pay]) /SUM(Sales.[Total Sales]) AS HolidayPayrollPercent
, SUM(Sales.[Bonus Pay]) /SUM(Sales.[Total Sales]) AS BonusPayrollPercent
, SUM([Sales].[Vacation Pay])/SUM([Sales].[Total Sales]) AS VacPayrollPercent
, SUM([Sales].[Sicktime Pay])/SUM([Sales].[Total Sales]) AS SicktimePayrollPercent
, SUM(Sales.[Total Food Cost]) AS SumTotalFoodCost
, SUM(Sales.[Total Food Cost])/SUM([Sales].[Total Sales]) AS TotalFoodCostPct
, SUM(Sales.[NGSS Percent]) AS SumNGSSPercent
, SUM(Sales.[TA Total Percent]) AS SumTATotalPercent
, SUM([Sales.Manager Pay]) AS SumManagersPay
, SUM(Sales.[Manager Pay])/SUM([Sales].[Total Sales]) AS ManagerPayrollPct
, SUM(Sales.[Training Pay]) AS SumTrainingPay
, SUM(Sales.[Training Pay])/SUM([Sales].[Total Sales]) AS TrainingPayrollPct
FROM
Store
INNER JOIN
Sales
ON
Store.ID = Sales.Store_ID
--> This WHERE is where the single store location is retrieved,
--> but need to get all selected locations on the SelectedStore
--> control and OR these results
WHERE
(
(
(
Store.Location
)
=[Forms]![Startup]![SelectedStore].[value]
)
AND
(
(
Sales.Date_
)
BETWEEN [Forms]![Startup]![StartDateToView] AND [Forms]![Startup]![EndDateToView]
OR
(
Sales.Date_
)
BETWEEN DATEADD("yyyy",-1,[Forms]![Startup]![StartDateToView]) AND DATEADD("yyyy",-1,[Forms]![Startup]![EndDateToView])
)
)
GROUP BY
Store.District
, Store.GM_name
, Store.Location
, YEAR(Sales.Date_);
【问题讨论】:
-
How to fomat sql."我没有尝试过,但我想我必须为每个选定的值运行 SQL" 为什么不呢?在问题标题(复制和粘贴)上询问网络,应该是强制性的!