powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Возможность фильтрации в процедуре нескольких групп одновременно
8 сообщений из 8, страница 1 из 1
Возможность фильтрации в процедуре нескольких групп одновременно
    #39798645
p.alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

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

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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
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



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

спасибо
...
Рейтинг: 0 / 0
Возможность фильтрации в процедуре нескольких групп одновременно
    #39798652
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p.alex,

Вам нужна функция или подзапрос, преобразующая список с разделителем в таблицу. Поищите, здесь было много таких примеров.
...
Рейтинг: 0 / 0
Возможность фильтрации в процедуре нескольких групп одновременно
    #39798888
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовp.alex,
Вам нужна функция или подзапрос, преобразующая список с разделителем в таблицу. Поищите, здесь было много таких примеров.
Да можно не заморачиваться

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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...
Код: sql
1.
where date_id between @date_from_int and @date_to_int
...
Рейтинг: 0 / 0
Возможность фильтрации в процедуре нескольких групп одновременно
    #39798894
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамирович,

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

это называется легаси...
...
Рейтинг: 0 / 0
Возможность фильтрации в процедуре нескольких групп одновременно
    #39798898
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKРуслан Дамирович,

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

это называется легаси...
Легаси головного мозгаPL/SQL?
...
Рейтинг: 0 / 0
Возможность фильтрации в процедуре нескольких групп одновременно
    #39799184
p.alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, кто не прошел мимо. Буду делать
...
Рейтинг: 0 / 0
Возможность фильтрации в процедуре нескольких групп одновременно
    #39799185
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан ДамировичTaPaKРуслан Дамирович,

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

это называется легаси...
Легаси головного мозгаPL/SQL?
тип date был не всегда
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Возможность фильтрации в процедуре нескольких групп одновременно
    #40085049
Gector555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руслан Дамирович,
вот ещё один пункт из этой задачи, голову уже сломал с ним.
Вывести долю продаж с НДС товара, в каждом дне/магазине/группе товаров, отсортировать выборку по убыванию показателя.
Примечание. Относительно расчета - нужна доля от продаж позиции в аптеке, от продажи группы товара в этой же аптеке. Показатель нужно добавить в текущую процедуру формирования данных для отчета.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Возможность фильтрации в процедуре нескольких групп одновременно
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]