Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка всех пар Дата-Клиент  [new]
Soilwork
Member

Откуда:
Сообщений: 8
Подскажите, пожалуйста, как правильно составить запрос. У меня есть таблица, в которой три поля: дата, компания и сумма. И вот из этого пытаюсь сделать таблицу, где бы каждой дате соответствовал каждый клиент, даже если в эту дату по этому клиенту не было суммы (будет показывать null).
Кажется, должно быть просто, но я застрял ) Делал так:
SELECT t.* FROM [Выгрузка] as t LEFT JOIN (SELECT DISTINCT [Клиент] FROM [Выгрузка]) as t1 ON t.[Клиент] = t1.[Клиент]
19 мар 20, 12:26    [22102072]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20174
SELECT *
FROM ( SELECT DISTINCT [Клиент] FROM [Выгрузка] ) t1
CROSS JOIN ( SELECT DISTINCT [Дата] FROM [Выгрузка] ) t2
LEFT JOIN [Выгрузка] t3 ON t1.[Клиент] = t3.[Клиент]
                       AND t2.[Дата] = t3.[Дата]

ну а если есть дата, которая нужна, но отсутствует в таблице вообще - тогда генери список таких дат в CTE вместо подзапроса t2.

Сообщение было отредактировано: 19 мар 20, 12:33
19 мар 20, 12:33    [22102082]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
Soilwork
Member

Откуда:
Сообщений: 8
Спасибо, попытаюсь это теперь преобразовать в запросе в VBA. Там нет кросс дожина (
19 мар 20, 12:43    [22102089]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1466
Soilwork
... в VBA ... нет кросс дожина (


Кросс джой в ВБА есть :)

Модератор: Не надо паясничать


Сообщение было отредактировано: 19 мар 20, 13:00
19 мар 20, 12:50    [22102100]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4365
Akina
SELECT *
FROM ( SELECT DISTINCT [Клиент] FROM [Выгрузка] ) t1
CROSS JOIN ( SELECT DISTINCT [Дата] FROM [Выгрузка] ) t2
LEFT JOIN [Выгрузка] t3 ON t1.[Клиент] = t3.[Клиент]
                       AND t2.[Дата] = t3.[Дата]

ну а если есть дата, которая нужна, но отсутствует в таблице вообще - тогда генери список таких дат в CTE вместо подзапроса t2.


Это не совсем то, что ему надо.

Проблема здесь

SELECT DISTINCT [Дата] FROM [Выгрузка]


Надо не существующие даты выбрать, а взять или сгенерить календарь и выбрать все даты непрерывно. И тогда для каждого клиента гарантированно будут все даты.

А LEFT JOIN подтянет значения туда, где они есть и оставить null там где их нет.
19 мар 20, 12:55    [22102112]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
Soilwork
Member

Откуда:
Сообщений: 8
Хм, у меня не принимает, выдаёт ошибку. Делаю в Excel запрос в файл Access.
19 мар 20, 12:58    [22102117]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Soilwork
Делаю в Excel запрос в файл Access.
"А вопрос задаю на форуме MSSQL. Я классный?"

Сообщение было отредактировано: 19 мар 20, 13:01
19 мар 20, 13:02    [22102119]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
Soilwork
Member

Откуда:
Сообщений: 8
Гавриленко Сергей Алексеевич, а есть отдельно под Excel? Там по-моему есть все кроме него )
19 мар 20, 13:05    [22102121]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Soilwork,

Есть форум по офису: https://www.sql.ru/forum/ms-office
Есть форум по Access: https://www.sql.ru/forum/access
19 мар 20, 13:13    [22102128]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
Soilwork
Member

Откуда:
Сообщений: 8
Гавриленко Сергей Алексеевич, спасибо и извиняюсь, что не по адресу.
Тему продублировал в офисе, эту можно закрыть.
19 мар 20, 13:43    [22102148]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20174
Soilwork
Делаю в Excel запрос в файл Access.
Да ещё поди DAO? ну используй картезианку, или (DAO, пожалуй, обидится на LEFT JOIN к картезианке) INNER JOIN ON 1=1.
19 мар 20, 13:46    [22102150]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
Soilwork
Member

Откуда:
Сообщений: 8
Akina, ADO. По моим наблюдениям, там нельзя составлять последовательные соединения, только вложенные. Оба этих метода не работают ) Либо у меня кривые руки
19 мар 20, 14:29    [22102198]     Ответить | Цитировать Сообщить модератору
 Re: Выборка всех пар Дата-Клиент  [new]
Soilwork
Member

Откуда:
Сообщений: 8
a_voronin, нет, как раз нужны существующие, которые хоть у одного клиента есть. Только у каких-то клиентов они по итогу будут пустые.
19 мар 20, 14:33    [22102203]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить