powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Взаимоисключающее присоединение одной таблицы без ключа
5 сообщений из 5, страница 1 из 1
Взаимоисключающее присоединение одной таблицы без ключа
    #39950302
IceMystic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация вот какая:
Есть данные о заправках автомобилей, присылаемые сторонней организацией и есть таблица путевых листов, в которой помимо
прочего водители пишут информацию о выданном топливе.
Явной связи между этими данными нет (можно просто попытаться найти путевой лист по транспортному средству, дате заправки,
виду топлива и типу топлива).

Задача:
Выводить данные о заправках в разрезе путевых листов, но если удовлетворяющий путевой лист не найден - всё равно
выводить, но выделять как-нибудь.

Суть проблемы:
Водитель может накосячить и указать заправку не в том путевом листе, в котором заправлялся на самом деле
(за день раньше или день позже например), а так же есть машины которые работают в две смены (то есть у них в день будет 2
путевых листа, один может быть с заправкой, второй - нет).
Написаны два подзапроса: один выводит значения, где путевой лист, удовлетворяющий условиям заправки: транспортное средство
+ дата + топливо + количество нашелся, второй - где не нашелся. Но из-за того, что у сменников больше, чем по одному путевому
листу в день данные задваиваются: то есть в одном случае он находит путевой лист за эту дату, удовлетворяющий условиям, а
второй раз находит второй путевой лист за эту дату, который под условия не подходит.

Вопрос:
Как сделать так, чтобы в случае, если путевой лист, удовлетворяющий условиям нашелся - то второй не отрабатывал
...
Рейтинг: 0 / 0
Взаимоисключающее присоединение одной таблицы без ключа
    #39950347
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceMystic
Вопрос:
Как сделать так, чтобы в случае, если путевой лист, удовлетворяющий условиям нашелся - то второй не отрабатывал
Это же вопросы по бизнесу, то есть нужно сформулировать функциональные требования, в данном случае алгоритм построения отчёта.
А тут раздел по конкретной СУБД.
Попробуйте лучше спросить в Проектировании, ну или у "заказчиков" этого отчёта.
...
Рейтинг: 0 / 0
Взаимоисключающее присоединение одной таблицы без ключа
    #39950359
IceMystic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
IceMystic
Вопрос:
Как сделать так, чтобы в случае, если путевой лист, удовлетворяющий условиям нашелся - то второй не отрабатывал
Это же вопросы по бизнесу, то есть нужно сформулировать функциональные требования, в данном случае алгоритм построения отчёта.
А тут раздел по конкретной СУБД.
Попробуйте лучше спросить в Проектировании, ну или у "заказчиков" этого отчёта.


Да нет, вопрос в другом: как сделать так, чтобы в результаты выборки двух подзапросов попадали все значения первого и те значения второго, которых нет в первом.
...
Рейтинг: 0 / 0
Взаимоисключающее присоединение одной таблицы без ключа
    #39950361
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceMystic,

Код: sql
1.
2.
select * from <первый подзапрос>
union all select * from <второй подзапрос> where not exists ( select from <первый подзапрос> )



Через cte или временные таблицы можно сделать так, чтобы <первый подзапрос> не надо было писать дважды.
...
Рейтинг: 0 / 0
Взаимоисключающее присоединение одной таблицы без ключа
    #39950364
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceMystic
Да нет, вопрос в другом: как сделать так, чтобы в результаты выборки двух подзапросов попадали все значения первого и те значения второго, которых нет в первом.
А, понятно.
Например, full join:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
declare @t1 table (id int, v int) insert @t1 values (1, 10), (2, 10), (3, 10), (8, 10), (9, 10)
declare @t2 table (id int, v int) insert @t2 values (1, 20), (2, 20), (4, 20), (5, 20), (9, 20)

select isnull(t2.id, t1.id) as id, isnull(t2.v, t1.v) as v
from @t1 as t1
	full join @t2 as t2
		on t2.id = t1.id
order by id
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Взаимоисключающее присоединение одной таблицы без ключа
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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