powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Присоединить таблицу дат к таблице фактов
12 сообщений из 12, страница 1 из 1
Присоединить таблицу дат к таблице фактов
    #40085452
Kellyjkee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день коллеги,
Пытаюсь сделать следующее
Есть таблица - Календарь (состоит из 1 столбца дат 01.01.2021 и тд...) AS y
Есть таблица фактов, структура (Дата | Склад | Товар | Качество | Остаток |) AS x

Пытаюсь протянуть остатки, для этого мне надо для каждой записи где y.Дата = x.Дата взять значение из таблицы x, а где нет значения NULL

Попробовал OUTER JOIN

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT 
     CASE WHEN b.Дата = x.Дата THEN x.Дата ELSE b.Дата END AS Дата
     ,x.КодСклада
     ,x.КодТовара
     ,x.Качество
     ,x.КонечныйОстаток 
FROM Календарь b
OUTER APPLY (
SELECT
      a.Дата
     ,a.КодСклада
     ,a.КодТовара
     ,a.Качество
     ,a.КонечныйОстаток 
FROM dbo.Остатки a
WHERE a.Дата = b.Дата) x



Если ограничиваю запрос условием
Код: sql
1.
WHERE a.Дата = b.Дата AND a.КодСклада = N'Какой-то склад' AND a.КодТовара = N'Какой-то товар'


В таком случае получаю нужную таблицу
А если для товара много складов да и самих товаров много, то не получается

В общем нужно присоединить календарь, к каждой группе (Склад, Товар, Качество)

Никак не пойму, как это сделать
...
Рейтинг: 0 / 0
Присоединить таблицу дат к таблице фактов
    #40085509
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT 
     COALESCE(b.Дата, x.Дата) AS Дата
     ,x.КодСклада
     ,x.КодТовара
     ,x.Качество
     ,x.КонечныйОстаток 
FROM
(
SELECT
      a.Дата
     ,a.КодСклада
     ,a.КодТовара
     ,a.Качество
     ,a.КонечныйОстаток 
FROM dbo.Остатки a
) x
RIGHT JOIN  Календарь b ON x.Дата = b.Дата
...
Рейтинг: 0 / 0
Присоединить таблицу дат к таблице фактов
    #40085527
Kellyjkee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a_voronin,

Спасибо, но это совсем не так работает

Ваш запрос вернул мне табл (скрин)

Мне нужно чтобы для каждой пары (Склад, Товар, Качество)
Были созданы даты

т.е. на скришоте видно, что по складу 000000226 - Таблица начинается с даты 16.07.2021

А должны быть записи
и для 17, 18, 19, числа c полями NULL


Если я выполню свой запрос, отфильтровав
WHERE a.Дата = b.Дата AND a.КодСклада = N'000000226' AND a.КодТовара = N'00000013997'

Я получу нужный рез.тт

А вот если уберу условие по складу, таблица формируется иначе
...
Рейтинг: 0 / 0
Присоединить таблицу дат к таблице фактов
    #40085531
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kellyjkee,

Вы напишите для начала запрос, который выдает все (Склад, Товар, Качество), а потом с фактов на него RIGHT JOIN
...
Рейтинг: 0 / 0
Присоединить таблицу дат к таблице фактов
    #40085915
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin,

не совсем так.
насколько я понимаю, требуется (select distinct Склад, Товар, Качество) cross join календарь left join Остатки
в идеале, первое должно выбираться из соответствующих справочников, а не таблицы остатков.
...
Рейтинг: 0 / 0
Присоединить таблицу дат к таблице фактов
    #40086998
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетитель
a_voronin,

не совсем так.
насколько я понимаю, требуется (select distinct Склад, Товар, Качество) cross join календарь left join Остатки
в идеале, первое должно выбираться из соответствующих справочников, а не таблицы остатков.



Это делает не так

вы из справочников (не касаясь таблицы фактов) формируете все комбинации, а затем связываете это с таблицей фактов.
...
Рейтинг: 0 / 0
Присоединить таблицу дат к таблице фактов
    #40087020
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а потом следующая просьба выкинуть из этого набора тысячи левых товаров которые уже давно не продаются и никому не нужны.
...
Рейтинг: 0 / 0
Присоединить таблицу дат к таблице фактов
    #40087023
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan Durak
а потом следующая просьба выкинуть из этого набора тысячи левых товаров которые уже давно не продаются и никому не нужны.


Это не относится к делу в рамках данной задачи.

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

a_voronin


вы из справочников (не касаясь таблицы фактов) формируете все комбинации, а затем связываете это с таблицей фактов.


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

Попробуй сделать временную таблицу-основу (Дата, Номер склада):


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
IF object_id('tempdb..#date_skl') IS NOT NULL DROP TABLE #date_skl;
SELECT 
 b.Дата
,t2.skl
into #date_skl
FROM Календарь b
inner join (select distinct КодСклада AS [skl] from dbo.Остатки) t2
  ON 1 = 1



Далее присоединяешь к этой таблице таблицу фактов:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT #date_skl.Дата
	,#date_skl.skl AS КодСклада
	,a.КодТовара
	,a.Качество
	,a.КонечныйОстаток
FROM #date_skl
LEFT JOIN Остатки a
	ON #date_skl.Дата = a.Дата
		AND #date_skl.skl = a.КодСклада
...
Рейтинг: 0 / 0
Присоединить таблицу дат к таблице фактов
    #40087084
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Va,

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

Да, вы правы, не совсем понял условие задачи
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Присоединить таблицу дат к таблице фактов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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