powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на выборку данных
4 сообщений из 4, страница 1 из 1
Запрос на выборку данных
    #40016574
Alkifr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Не могу решить казалось бы простой кейс.
Есть 2 таблицы.
1 таблица, в которой хранится информация о периоде, цене и есть некий фильтр:
NameDate_stDate_endPriceFilterABC10.10.2010.11.201000ABC01.11.2005.11.20200xxx
2 таблица, в которой хранится список событий
NameDate_actionFilterABC15.10.20 xxx ABC18.10.2020yyyABC21.10.2020zzzABC24.10.2020xyzABC27.10.2020xzyABC30.10.2020yyyABC02.11.2020zyxABC05.11.2020 xxx ABC08.11.2020aaaABC11.11.2020bbb

А на выходе должна получиться вот такая таблица. Т.е. нужно организовать поиск по дате начала и дате окончания события, и по фильтру. Если фильтр пустой, то применяется цена для всех событий, а для фильтра xxx, только та цена, для какого периода она действительна.
NAMEDate_durFilterPriceABC15.10.2020 xxx 1000ABC18.10.2020yyy 1000ABC21.10.2020zzz 1000ABC24.10.2020xyz 1000ABC27.10.2020xzy 1000ABC30.10.2020yyy 1000ABC02.11.2020zyx 1000ABC05.11.2020 xxx 200ABC08.11.2020aaa 1000ABC11.11.2020bbb 1000

Очень прошу помощи, хотя бы наводку, в какую сторону копать, чтобы получить необходимый результат.
...
Рейтинг: 0 / 0
Запрос на выборку данных
    #40016614
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на представленных вкачествеобразца данных и без претензий

Код: 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.
USE master
GO

WITH FilterTable(Namen,StartDate,StopDate,Price,Filterr)AS
(
  SELECT 'ABC','20201010','20201110',1000.00,''
   UNION ALL
  SELECT 'ABC','20201101','20201105',200.00,'XXX'
),
ActionsTable(NameN,DateAction,Filter) AS
(
  SELECT 'ABC','20201015','XXX'
   UNION ALL
  SELECT 'ABC','20201018','YYY'
   UNION ALL
  SELECT 'ABC','20201021','ZZZ'
   UNION ALL
  SELECT 'ABC','20201024','XYZ'
   UNION ALL
  SELECT 'ABC','20201027','XZY'
   UNION ALL
  SELECT 'ABC','20201030','YYY'
   UNION ALL
  SELECT 'ABC','20201102','ZYX'
   UNION ALL
 SELECT 'ABC','20201105','XXX'
  UNION  ALL
 SELECT 'ABC','20201108','AAA'
  UNION ALL
 SELECT 'ABC','20201111','BBB'  
)
SELECT C.NameN,C.DateAction,C.Filter,X.Price,X2.Price,
CASE 
 WHEN X2.PRICE IS NULL THEN X.PRICE
 ELSE X2.PRICE
END AS FLAG_1
FROM ActionsTable C
CROSS  APPLY
(  
  SELECT TOP 1 F.Price
   FROM FilterTable F
   WHERE F.Namen=C.NameN AND C.DateAction BETWEEN F.StartDate AND F.StopDate

)X
OUTER APPLY 
(  
  SELECT TOP 1 F.Price
   FROM FilterTable F
   WHERE F.Namen=C.NameN AND C.DateAction BETWEEN F.StartDate AND F.StopDate
   AND C.Filter=F.Filterr

)X2
...
Рейтинг: 0 / 0
Запрос на выборку данных
    #40016648
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT C.NameN,cast (C.DateAction as datetime) as DateAction ,C.Filter,
			isnull(
				(select top 1 F.Price  from FilterTable F 
					where C.DateAction  between  F.StartDate and F.StopDate
					and F.Filterr=C.Filter),
				(select top 1 F.Price  from FilterTable F 
					where C.DateAction  between  F.StartDate and F.StopDate
				)
			 )
			 as Price
FROM ActionsTable C
...
Рейтинг: 0 / 0
Запрос на выборку данных
    #40016725
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alkifr
Если фильтр пустой
Это пустая строка или это NULL?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на выборку данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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