Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Присоединить таблицу дат к таблице фактов / 12 сообщений из 12, страница 1 из 1
22.07.2021, 16:07
    #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
22.07.2021, 17:36
    #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
22.07.2021, 18:12
    #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
22.07.2021, 18:24
    #40085531
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присоединить таблицу дат к таблице фактов
Kellyjkee,

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

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

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



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

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


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

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

a_voronin


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


я об этом и писал в своем последнем предложении. что данные надо по возможности брать из справочников.
проблема в том, что их может не быть, а их появление - это тоже уже другая задача
...
Рейтинг: 0 / 0
29.07.2021, 15:20
    #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
29.07.2021, 15:32
    #40087084
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присоединить таблицу дат к таблице фактов
Alex_Va,

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

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


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