Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Возможность фильтрации в процедуре нескольких групп одновременно  [new]
p.alex
Member

Откуда:
Сообщений: 2
Всем привет!

я начинающий пользователь

прошу помощи и подсказки как выполнить вот это условие для процедуры
Добавить возможность фильтрации по нескольким группам товаров одновременно.
Пример входных данных: 'Биологически активные добавки,Косметические средства'
Пример запуска процедуры после модернизации: exec sp_report_1 @date_from = '2017-06-01', @date_to = '2017-06-30', @good_group_name = 'Биологически активные добавки,Косметические средства'

вот скрипт самой процедуры

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_report_1]
	@date_from date,
	@date_to date,
	@good_group_name nvarchar(MAX)
AS
BEGIN
		
	declare @date_from_int int
	declare @date_to_int int
	
	set @date_from_int = (select top 1 did from dbo.dim_date where d = @date_from )
	set @date_to_int = (select top 1 did from dbo.dim_date where d = @date_to )
	
	
	SELECT d.d as [Дата]
		, s.store_name as [Аптека]
		, g.group_name as [Группа товара]
		, g.good_name as [Номенклатура]
		, SUM(f.quantity) as [Продажи шт.]
		, SUM(f.sale_grs) as [Продажи руб., с НДС]
		, sum(f.cost_grs) as [Закупка руб., с НДС]
		, (sum(f.cost_net)/NULLIF(SUM(f.quantity),0)) as [Средняя цена закупки руб., без НДС]
		, (SUM(f.sale_net)-SUM(f.cost_net)) as [Маржа руб. без НДС]
		, (SUM(f.sale_net)-SUM(f.cost_net))/(NULLIF(SUM(f.cost_net),0))*100 as [Наценка % без НДС]
FROM [dbo].[fct_cheque] as f
		LEFT JOIN (SELECT DISTINCT cash_register_id FROM [dbo].[dim_cash_register]) as cr
		on f.cash_register_id=cr.cash_register_id
		LEFT JOIN [dbo].[dim_date] as d
		ON d.did=f.date_id
		LEFT JOIN (SELECT DISTINCT [good_id],[good_name],[group_id],[group_name]
		FROM [dbo].[dim_goods]) as g
		on f.good_id=g.good_id
		LEFT JOIN [dbo].[dim_stores] as s
		on s.store_id=f.store_id
	where date_id between @date_from_int and @date_to_int
		and g.group_name = @good_group_name
	GROUP BY d.d
		, s.store_name 
		, g.group_name
		, g.good_name
		, f.sale_net
		, f.cost_net
		
		
END


пожалуйста помогите с данной задачей

спасибо
9 апр 19, 11:56    [21856926]     Ответить | Цитировать Сообщить модератору
 Re: Возможность фильтрации в процедуре нескольких групп одновременно  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6532
p.alex,

Вам нужна функция или подзапрос, преобразующая список с разделителем в таблицу. Поищите, здесь было много таких примеров.
9 апр 19, 12:02    [21856934]     Ответить | Цитировать Сообщить модератору
 Re: Возможность фильтрации в процедуре нескольких групп одновременно  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 921
Владислав Колосов
p.alex,
Вам нужна функция или подзапрос, преобразующая список с разделителем в таблицу. Поищите, здесь было много таких примеров.

Да можно не заморачиваться

DECLARE @good_group_name nvarchar(MAX) = 'Биологически активные добавки,Косметические средства'
SET @good_group_name = ',' + @good_group_name + ','
SELECT 
   ...
FROM
  ...
  INNER JOIN [dbo].[dim_goods] as g ON (
		on f.good_id=g.good_id )
  ...
WHERE
  @good_group_name LIKE '%,' + g.[group_name] + ',%'

Но это, конечно, зло.

А вот это уже за гранью добра и зла - не понимаю, зачем хранить дату в виде int...
where date_id between @date_from_int and @date_to_int
9 апр 19, 16:20    [21857376]     Ответить | Цитировать Сообщить модератору
 Re: Возможность фильтрации в процедуре нескольких групп одновременно  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
Руслан Дамирович,

автор
А вот это уже за гранью добра и зла - не понимаю, зачем хранить дату в виде int...

это называется легаси...
9 апр 19, 16:26    [21857389]     Ответить | Цитировать Сообщить модератору
 Re: Возможность фильтрации в процедуре нескольких групп одновременно  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 921
TaPaK
Руслан Дамирович,

автор
А вот это уже за гранью добра и зла - не понимаю, зачем хранить дату в виде int...

это называется легаси...

Легаси головного мозгаPL/SQL?
9 апр 19, 16:30    [21857396]     Ответить | Цитировать Сообщить модератору
 Re: Возможность фильтрации в процедуре нескольких групп одновременно  [new]
p.alex
Member

Откуда:
Сообщений: 2
Спасибо всем, кто не прошел мимо. Буду делать
10 апр 19, 10:06    [21858007]     Ответить | Цитировать Сообщить модератору
 Re: Возможность фильтрации в процедуре нескольких групп одновременно  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
Руслан Дамирович
TaPaK
Руслан Дамирович,

пропущено...

это называется легаси...

Легаси головного мозгаPL/SQL?

тип date был не всегда
10 апр 19, 10:06    [21858008]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить