Построитель отчетов SQL: добавление опции <All>в выпадающий список - PullRequest
0 голосов
/ 26 сентября 2019

Я нашел этот вопрос на 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

enter image description here За мое предыдущее упоминание другого вопроса, подобного этому, он сказал, что не используетГДЕ оговорка.Я, однако, должен использовать предложение 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), потому что построитель отчетов пройдетстрока значений параметров, таких как «Боб», «Мэри», «Джон», которые требуют, чтобы они были заключены в скобки.Это для тех, кто ищет ответы.

...