Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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, 12:36 |
9 апр 19, 11:56 [21856926] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8346 |
p.alex, Вам нужна функция или подзапрос, преобразующая список с разделителем в таблицу. Поищите, здесь было много таких примеров. |
9 апр 19, 12:02 [21856934] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
Да можно не заморачиваться 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] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Руслан Дамирович,
это называется легаси... |
||
9 апр 19, 16:26 [21857389] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
Легаси |
||||
9 апр 19, 16:30 [21857396] Ответить | Цитировать Сообщить модератору |
p.alex Member Откуда: Сообщений: 2 |
Спасибо всем, кто не прошел мимо. Буду делать |
10 апр 19, 10:06 [21858007] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
тип date был не всегда |
||||
10 апр 19, 10:06 [21858008] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |