Я нашел этот вопрос на SO в другом месте, но ответ включал часть, которая не относится ко мне, поэтому я должен задать этот вопрос со своими подробностями.
Мне нужно просто добавить опцию в моемвыпадающее меню.Вот мой SQL-запрос, который будет использоваться только для продавца (режим отладки):
declare @user varchar(30)
set @user = 'DOMAIN\ppelzel'
select SalesPerson_Name
from Salesperson
where salesperson_id = case
when @user in ('DOMAIN\Brandyj',
'DOMAIN\jwilson','DOMAIN\KRoberts',
'DOMAIN\ppelzel','DOMAIN\bmurray')then salesperson_id
else SUBSTRING(@user,14,20)
end
order by 1
За мое предыдущее упоминание другого вопроса, подобного этому, он сказал, что не используетГДЕ оговорка.Я, однако, должен использовать предложение WHERE, потому что оно мне нужно, чтобы определить, соответствует ли человек, вошедший в систему, тому, что находится в наборе данных, тогда это единственное имя, которое они увидят, кроме нескольких пользователей-администраторов, которым нужно видетьвсем.
Для этих же пользователей-администраторов мне нужно добавить опцию, чтобы выбрать всех продавцов.Я попытался просто использовать «разрешить множественные значения», но это не понравилось и выдает ошибку: Incorrect syntax near ','.
, даже когда я убираю предложение WHERE в своем запросе sp.salesperson_name = @salesperson.В любом случае, как мне лучше всего добавить опцию «Все» для этого отчета?
РЕДАКТИРОВАТЬ: Я только что понял, что мне может понадобиться добавить основной запрос к набору данных для контекста:
SELECT sp.SalesPerson_Name
,c.Calendar_Month_Name
,sum(isnull(sales_qty, 0)) AS 'total gallons'
,sum(isnull(Ext_Retail_Base, 0) + isnull(Ext_Retail_Freight, 0)) - sum(isnull(Ext_Cost_Base, 0) + isnull(Ext_Cost_Freight, 0)) 'Sales GM'
,(sum(isnull(Ext_Retail_Base, 0) + isnull(Ext_Retail_Freight, 0)) - sum(isnull(Ext_Cost_Base, 0) + isnull(Ext_Cost_Freight, 0))) / sum(isnull(sales_qty, 0)) 'cpg'
FROM Fuel_Wholesale_Sales_Fact fwsf
JOIN calendar c ON fwsf.Calendar_key = c.calendar_key
JOIN Salesperson sp ON sp.SalesPerson_Key = fwsf.Salesperson_Key
JOIN Customer cu ON fwsf.Customer_Key = cu.Customer_Key
WHERE sp.SalesPerson_Name = @SalesPerson
AND c.Day_Date BETWEEN @Start
AND @End
and isnull(fwsf.sales_qty,0) != 0
GROUP BY sp.SalesPerson_Name, c.Calendar_Month_Name
ОБНОВЛЕНИЕ 1: Я попытался использовать функцию STRING_SPLIT, но даже на простом примере с веб-сайта Microsoft (https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2016) я получил ошибку: Invalid object name 'STRING_SPLIT'.
Я использую SQL 2016. Мысли?
Понял. Проблема уровня совместимости. Моя БД установлена на 110. Мне может понадобиться задать несколько вопросов, если есть причина, по которой она установлена, а не по умолчанию130.
ОБНОВЛЕНИЕ 2: Я наконец-то разобрался в том, что мне нужно. Я просто использовал опцию «Разрешить несколько значений» в свойствах параметров. До этого она не работала, потому чтоЯ по глупости не использовал оператор IN и не окружал параметр круглыми скобками.
Поэтому у меня было следующее: select salesperson where id = @salesperson
Когда мне было нужно: select salesperson where id in (@salesperson)
, потому что построитель отчетов пройдетстрока значений параметров, таких как «Боб», «Мэри», «Джон», которые требуют, чтобы они были заключены в скобки.Это для тех, кто ищет ответы.