Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 12.04.2019
Сообщений: 4

Возможность фильтрации в процедуре нескольких групп одновременно

12.04.2019, 19:59. Показов 5709. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет

есть такая процедура в которой присутствует группировка по одной группе товаров:
exec sp_report_1 @date_from = '2017-06-01', @date_to = '2017-06-30', @good_group_name = N'Биологически активные добавки'

вот ее скрипт


T-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
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
        
END
Необходимо добавить возможность фильтрации по нескольким группам товаров одновременно.
Пример входных данных: 'Биологически активные добавки,Косметические средства'
Пример запуска процедуры после модернизации:
exec sp_report_1 @date_from = '2017-06-01', @date_to = '2017-06-30', @good_group_name = 'Биологически активные добавки,Косметические средства'

подскажите пожалуйста как это сделать

пока ничего дельного не получается


спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2019, 19:59
Ответы с готовыми решениями:

Есть ли возможность перехватывать любые исключения программы глобально, а не в каждой процедуре
Интересует следующий вопрос. Есть ли возможность перехватывать любые исключения программы, но при этом не брать весь код в try? Короче...

Как запретить нескольким пользователям одновременно обращаться к одной и той же процедуре в package?
как запретить нескольким пользователям одновременно обращаться к одной и той же процедуре в package? другими словами, хотелось бы...

Применение нескольких checkbox к datagrid для фильтрации данных
Есть 2 чекбокса, чекбокс1 = Имя1, чекбокс2 = Имя1. В датагрид данные идут и бд. Если я нажимаю на чекбокс1, то в датагрид фильтруется и...

1
15 / 11 / 4
Регистрация: 12.04.2019
Сообщений: 45
12.04.2019, 21:17
Попробуйте, возможно это Вам поможет:
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
51
52
53
54
55
56
57
58
59
IF EXISTS(SELECT * FROM sys.objects WHERE name='pStringToTable' AND TYPE='P') DROP proc  pStringToTable
IF EXISTS(SELECT * FROM sys.objects WHERE name='pGroupSelect'   AND TYPE='P') DROP proc  pGroupSelect
IF EXISTS(SELECT * FROM sys.tables  WHERE name='tGroupProduct'              ) DROP TABLE tGroupProduct
CREATE TABLE tGroupProduct
 (
  Dtm datetime
 ,GroupName nvarchar(255)
 )
GO
INSERT tGroupProduct
              SELECT '20190101', 'Биологически активные добавки'
    UNION ALL SELECT '20190102', 'Косметические средства'
    UNION ALL SELECT '20190102', 'Противозачаточные средства'
    UNION ALL SELECT '20190103', 'Косметические средства'
    UNION ALL SELECT '20190105', 'Биологически активные добавки'
    UNION ALL SELECT '20190102', 'Примочки от прыщей'
 
GO
--Преобразование строки в таблицу
CREATE proc pStringToTable
@nList nvarchar(MAX)
AS SET nocount ON
--
IF ascii(RIGHT(@nList,1))<>44 SET @nList=@nList+CHAR(44)
DECLARE @temp TABLE (GroupName nvarchar(255))
DECLARE @pos INT
DECLARE @len INT SET @len=len(@nList)
while @len>0
 BEGIN
 SET @pos=charindex(CHAR(44),@nList)
 INSERT @temp SELECT LEFT(@nList,@pos-1)
 SET @nList=SUBSTRING(@nList,@pos+1,len(@nList))
 SET @len=len(@nList)
 END
--output result
SELECT * FROM @temp
--
GO
CREATE proc pGroupSelect
 @dBeg datetime
,@dEnd datetime
,@nGrp nvarchar(MAX)
AS SET nocount ON
DECLARE @temp TABLE (GroupName nvarchar(255))
INSERT @temp EXEC pStringToTable @nGrp
--output result
SELECT Dtm, G.GroupName FROM tGroupProduct G JOIN @temp Tmp ON G.GroupName=Tmp.GroupName WHERE Dtm BETWEEN @dBeg AND @dEnd
GO
 
DECLARE @dBeg datetime SET @dBeg='20190101'
DECLARE @dEnd datetime SET @dEnd='20190102'
DECLARE @nGrp nvarchar(MAX) SET @nGrp='Биологически активные добавки,Косметические средства'
EXEC pGroupSelect @dBeg, @dEnd, @nGrp
GO
 
IF EXISTS(SELECT * FROM sys.objects WHERE name='pStringToTable' AND TYPE='P') DROP proc  pStringToTable
IF EXISTS(SELECT * FROM sys.objects WHERE name='pGroupSelect'   AND TYPE='P') DROP proc  pGroupSelect
IF EXISTS(SELECT * FROM sys.tables  WHERE name='tGroupProduct'              ) DROP TABLE tGroupProduct
GO
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.04.2019, 21:17
Помогаю со студенческими работами здесь

При фильтрации выбор из поля со списком нескольких значений
Здравствуйте и добрый вечер! Как-то по форуму встречал иногда темы, в которых обсуждались моменты с выбором из поля со списком нескольких...

Игра 21 - реализовать возможность вести одновременно 10 игр
Попробовать создать консольную игру &quot;21&quot; таким образом, чтобы в программе была возможность вести одновременно 10 игр (предположим, что...

Критична ли возможность обращения к скрипту, одновременно до 15 пользователей?
Планирую написать систему тестирования для студентов. Придуманный мною алгоритм такой: студент логиниться под заранее зареганными...

Комбинация из нескольких групп
Можно ли батником запускать комбинацию разных групп программ? @echo off echo ^ 1 - SFTP + HTTPS echo ^ 2 - CHROME + DENWER + HTTPS...

Есть ли в log4j возможность одновременно логировать в разные файлы?
Не подскажете как можно настроить log4j что бы иметь лог только своего приложения (ejb под jboss), без служебной информации jbossa....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru