Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложный запрос сравнения / 25 сообщений из 34, страница 1 из 2
02.04.2013, 09:19
    #38208306
Mikhails
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Друзья, добрый день!
Возникла сложная задачка.
Имеются две таблицы T1 и T2 в каждой таблице есть поля Id,Глубина От,Глубина до,Описание
Необходимо создать третью в которой для одинаковых ID и одинаковых глубин будут слиты в один столбец два описания.
ПРОБЛЕМА! Глубины не одинаковы, пример:
T1
ID Глубина от Глубина до Описание
1 0 10 Песок
1 10 20 Глина
1 20 30 Глина с переслоением
1 30 50 Суглинки

Т2
ID Глубина от Глубина до Описание
1 0 30 Примеси
1 30 60 Чистая

Получить нужно:
ID Глубина от Глубина до Описание
1 0 10 Песок,примеси
1 10 20 Глина,примеси
1 20 30 Глина с переслоением,примеси
1 30 50 Суглинки,чистая

Осложняется, что делается из под внешней программы работающей с базой в Access и использовать могу лишь Access Sql

Перепробовал всё, что знал.. но из-за разного количества интервалов не выходит ничего, буду благодарен за помощь и советы.
...
Рейтинг: 0 / 0
02.04.2013, 09:22
    #38208311
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Mikhails,

похоже, что не одинаковы, а пересекаются, не?
...
Рейтинг: 0 / 0
02.04.2013, 09:24
    #38208314
cylindr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Mikhails,

У вас ничего не получится, чем отличается
Mikhails1 20 30 Глина с переслоением

от
Mikhails1 30 50 Суглинки

Почему именно ко второй записи нужно прицеплять

Mikhails1 30 60 Чистая

?
...
Рейтинг: 0 / 0
02.04.2013, 09:32
    #38208322
Mikhails
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
cylindr,
Согласен, тут ещё одна "затычка" но возьмём к примеру, что необходимо "прицеплять" к верхнему интервалу.
...
Рейтинг: 0 / 0
02.04.2013, 09:34
    #38208325
Mikhails
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Интересует именно возможно ли организовать сравнение, с учётом неодинакового количества строк..
Я таких вариантов придумать не могу.., может быть "порезать" вторую таблицу на интервалы идентичные T1 опять же, как это сделать не ясно
...
Рейтинг: 0 / 0
02.04.2013, 09:35
    #38208327
Mikhails
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Озверин,
Даже не смотрю пока на наличие пересечений (хотя это возможно).
...
Рейтинг: 0 / 0
02.04.2013, 09:38
    #38208331
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
При всей непохожести по сути это задача матчинга по фифо. Есть много готовых решений но не джет скл, естественно, а на т-скл. Имеет смысл взять за основу и переделать.
...
Рейтинг: 0 / 0
02.04.2013, 09:40
    #38208336
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Могу подсказать на пальцах.

1. Выбрать все диапазоны от-до из первой таблицы.
2. Выбрать все диапазоны от-до из второй таблицы.
3. Объединить их юнионом.
4. Оставить тольо уникальные значений.
5. Соединить получившийся результат битвином с первой и второй таблицей, так, чтобы пересечения от-до результата и от-до таблиц были непустые.

Вопщем даже не особо сложно.
...
Рейтинг: 0 / 0
02.04.2013, 09:50
    #38208352
cylindr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Программист-Любитель,

В первой таблице 4 записи, во второй - 2, получить нужно - 4, у вас будет 2?
...
Рейтинг: 0 / 0
02.04.2013, 09:55
    #38208360
Mikhails
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
cylindr,Нужно именно 4.. к более точному описанию приписать более общее.
Возможно есть решение на VBA? и можно в самой базе Access создать что-либо для слияния этих описаний..
...
Рейтинг: 0 / 0
02.04.2013, 10:02
    #38208369
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Нет. Вы не поняли. Прочитайте про квитовку/матчинг фифо.

Табл.1 Табл.20-100-510-205-1520-3015-35
С-По0-55-1010-1515-2020-3030-35
N Табл.1 Табл.210-5 из 0-100-525-10 из 0-105-10 из 5-15310-15 из 10-2010-15 из 5-15415-20 из 10-2015-20 из 15-35520-3020-30 из 15-356-30-35 из 15-35
...
Рейтинг: 0 / 0
02.04.2013, 10:19
    #38208414
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Я что-то не понял наверное:

Код: sql
1.
2.
3.
SELECT T1.DepthFrom AS [Глубина от], T1.DepthTo AS [Глубина до], [T1Description] & ", " & [T2Description] AS Описание
FROM T1, T2
WHERE (((T1.DepthFrom) Between [T2].[DepthFrom] And [T2].[DepthTo]) AND ((T1.DepthTo) Between [T2].[DepthFrom] And [T2].[DepthTo]));
...
Рейтинг: 0 / 0
02.04.2013, 10:22
    #38208419
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
А, да, я не понял, почему в обоих таблицах ID всюду еденицы... И почему в результирующем запросе тоже ID единицы, и, вообще, зачем они нужны
...
Рейтинг: 0 / 0
02.04.2013, 10:23
    #38208425
Mikhails
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Программист-Любитель,
Не совсем ясен один момент, при объединении UNION необходимо, чтобы совпадали ID в данных таблицах..
Объединение Inner Join срабатывает, но на выходе - каша
...
Рейтинг: 0 / 0
02.04.2013, 10:26
    #38208434
Mikhails
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Rivkin Dmitry,
Дмитрий, данные ID - номера скважин, они должны совпадать (естественно) при объединении описания интервалов.
Задача полностью такова - есть описания пород в скважинах в одной таблице - описание породы (более крупные интервалы) в другой описание минерализации в скважинах (более мелкие интервалы), нужна таблица, где будет по каждой скважине полное описание - Номер, интервал, описание (порода+минерализация)
...
Рейтинг: 0 / 0
02.04.2013, 10:48
    #38208496
s_ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Mikhails, а в чем проблема?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Select
t1.id
,t1.glub_from
,t1.glub_to
,(t1.description + t2.description) as 'description'
from
t1 
join 
t2
on t1.id = t2.id 
and t1.glub_from >= t2.glub_from
and t1.glub_to <= t2.glub_to



Предполагается, что в t1 диапазоны всегда меньше чем в t2.


Есть нюанс - когда диапазон t1 пересекает диапазон t2.

T1
ID Глубина от Глубина до Описание
1 0 10 Песок
1 10 20 Глина
1 20 40 Глина с переслоением
1 40 50 Суглинки

Т2
ID Глубина от Глубина до Описание
1 0 30 Примеси
1 30 60 Чистая

но для этого случая надо решать. или мы разбиваем диапазоны
например так:
T1
ID Глубина от Глубина до Описание
1 0 10 Песок
1 10 20 Глина
1 20 30 Глина с переслоением
1 30 40 Глина с переслоением

1 40 50 Суглинки

Т2
ID Глубина от Глубина до Описание
1 0 30 Примеси
1 30 60 Чистая


или правим данные ручками для таких пересечений.
зачем тут фифо - вообще не понял

разбить диапазоны тоже можно селектом - ничего сложного.
...
Рейтинг: 0 / 0
02.04.2013, 11:08
    #38208545
Mikhails
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
s_ustinov, попробую и отпишусь о результатах
...
Рейтинг: 0 / 0
02.04.2013, 11:14
    #38208567
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
s_ustinovзачем тут фифо - вообще не понял
Если хотя бы одна граница в более грубой таблице не совпадает ни с одной границе в более подробной таблице. Я специально давал пример, где первая таблица хранит свои куски, не укладывающиеся нацело во вторую.

Если такие случаи допустимы - то ФИФО однозначно. Случай, когда более детальная таблица обязательно укладывается нескоькими слоями в более грубую таблицу, можно рассматривать как частный случай ФИФО (при продажах реализуется то, что было куплено несколькими мелкими партиями подчистую).
...
Рейтинг: 0 / 0
02.04.2013, 11:56
    #38208690
s_ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
П-Лs_ustinovзачем тут фифо - вообще не понял
Если хотя бы одна граница в более грубой таблице не совпадает ни с одной границе в более подробной таблице. Я специально давал пример, где первая таблица хранит свои куски, не укладывающиеся нацело во вторую.

Если такие случаи допустимы - то ФИФО однозначно. Случай, когда более детальная таблица обязательно укладывается нескоькими слоями в более грубую таблицу, можно рассматривать как частный случай ФИФО (при продажах реализуется то, что было куплено несколькими мелкими партиями подчистую).


????????
зачем такие сложности???
разбиваем первую так, чтобы диапазон в первой таблице гарантированно укладывался во вторую - и все.
проблема, это когда в таблицах в диапазонах "дырки":
1 10 15 Глина
1 20 30 Глина с переслоением
1 35 50 Суглинки

но насколько я понимаю, это явно ошибочные данные, и их чистка является немного другой задачей.

а несовпадение диапазонов лечится намного проще:

Код: 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.
Select distinct
t1.id
,t1.glub_from
,t2.glub_from
,t1.description
from
t1 
join 
t2
on t1.id = t2.id 
and t1.glub_from >= t2.glub_from
and t1.glub_to > t2.glub_to
and t1.glub_from < t2.glub_to

union

Select distinct
t1.id
,t2.glub_from
,t1.glub_to
,t1.description
from
t1 
join 
t2
on t1.id = t2.id 
and t1.glub_from >= t2.glub_from
and t1.glub_to > t2.glub_to
and t1.glub_from < t2.glub_to

union 

Select  distinct
t1.id
,t1.glub_from
,t1.glub_to
,t1.description
from
t1 
join 
t2
on t1.id = t2.id 
and t1.glub_from >= t2.glub_from
and t1.glub_to <= t2.glub_to



в результате получаем t1, разбитую на нужные нам диапазоны
...
Рейтинг: 0 / 0
02.04.2013, 14:03
    #38209075
Mikhails
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
Переписал скрипт, ругается на неверный синтаксис в Join, переписал снова та же тема.
В принципе подход понятен, но реализация, как то не получается.
Плюс нашёлся ещё один подводный камень.. в Т1 может быть ситуация, когда на один и тот же интервал два разных описания (и это не ошибка, там внутри процентное содержание записано). Каждому их них нужно приписать более "грубое" значение из Т2.
Интервалы в Т2 обычно более крупные чем, в Т1 например 0-70, 70 -100. В Т1 при этом 0-10,10-20,20-30, и т.д.
Бьюсь с задачей целый день.. пока без успешно
...
Рейтинг: 0 / 0
02.04.2013, 14:15
    #38209109
s_ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
MikhailsПереписал скрипт, ругается на неверный синтаксис в Join, переписал снова та же тема.
В принципе подход понятен, но реализация, как то не получается.
Плюс нашёлся ещё один подводный камень.. в Т1 может быть ситуация, когда на один и тот же интервал два разных описания (и это не ошибка, там внутри процентное содержание записано). Каждому их них нужно приписать более "грубое" значение из Т2.
Интервалы в Т2 обычно более крупные чем, в Т1 например 0-70, 70 -100. В Т1 при этом 0-10,10-20,20-30, и т.д.
Бьюсь с задачей целый день.. пока без успешно
С синтаксисом я не помогу - на sql2008r2 такое работает, а access ставить себе не буду
а два разных описания - не понятно, о чем речь. приводи пример с данными.
...
Рейтинг: 0 / 0
02.04.2013, 15:07
    #38209263
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
MikhailsПереписал скрипт, ругается на неверный синтаксис в Join, переписал снова та же тема.
В принципе подход понятен, но реализация, как то не получается.
Плюс нашёлся ещё один подводный камень.. в Т1 может быть ситуация, когда на один и тот же интервал два разных описания (и это не ошибка, там внутри процентное содержание записано). Каждому их них нужно приписать более "грубое" значение из Т2.
Интервалы в Т2 обычно более крупные чем, в Т1 например 0-70, 70 -100. В Т1 при этом 0-10,10-20,20-30 , и т.д.
Бьюсь с задачей целый день.. пока без успешно
1. Это усложнение модели ваших данных. Ваша Т1 распадается на две таблицы Т11 и Т12, в первой - перечень интервалов, во второй - описания интервалов, одному интервалу соответствует одно или БОЛЕЕ одного описания. Нормальная связь 1:М.
2. Эта проблема решена в моем примере и моем алгоритме запросов по ФИФО.

Бейтесь дальше. Все ваши "проблемы" - обычные несложные задачи.
...
Рейтинг: 0 / 0
02.04.2013, 15:11
    #38209268
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
s_ustinovзачем такие сложности???Жизненные реалии сложные. Я предлагаю сделать решение, охватывающее особенности предметной области, а вы - подогнать постановку задачи под упрощенный алгоритм ? ФИФО давно обсосана со всех сторон в учетных системах. Почему не воспользоваться этой моделью в данном случае, который как раз в нее укладывается ?
...
Рейтинг: 0 / 0
02.04.2013, 15:34
    #38209320
s_ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
П-ЛЯ предлагаю сделать решение, охватывающее особенности предметной области, а вы - подогнать постановку задачи под упрощенный алгоритм ? ФИФО давно обсосана со всех сторон в учетных системах. Почему не воспользоваться этой моделью в данном случае, который как раз в нее укладывается ?
ФИФО предполагает наличие временной шкалы и эта концепция применима именно в системах, где состояние изменяется во времени. Задача ТС статична - у нас в некий момент времени появляется готовый набор данных для скважины. И пытаться применить сюда фифо наверно можно, но это запутывает при анализе проблемы. Ведь тут нет такого, что сначала появляется запись

T1
ID Глубина от Глубина до Описание
1 0 10 Песок

потом
T1
ID Глубина от Глубина до Описание
1 10 20 Глина

потом
T1
ID Глубина от Глубина до Описание
1 20 30 Глина с переслоением

и только потом
Т2
ID Глубина от Глубина до Описание
1 0 30 Примеси


весь набор данных появляется одномоментно, и алгоритм обработки надо строить исходя из этого
...
Рейтинг: 0 / 0
02.04.2013, 15:42
    #38209339
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос сравнения
s_ustinovвесь набор данных появляется одномоментно, и алгоритм обработки надо строить исходя из этого
При чем тут вермя ? Вы не видите, что глубина от-до в данной задаче точно соответствует нарастающему итогу ФИФО ?
Табл.1 Табл.2 0-10 0-5 10-20 5-15 20-30 15-35
Табл.1 Табл.2 Купили 10 (0-10) Продали 5 (0-5)К 10 купили еще 10 всего 20 (10-20) Уже продали 5 еще продали 10 всего 15 (5-15)К 20 купили еще 10 всего 30 (20-30) Уже продали 15 еще продали 20 всего 35 (15-35)
Посмотрите логику моего примера выше по топику - она полностью находит все соответствия двух таблиц. И она является логикой ФИФО.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложный запрос сравнения / 25 сообщений из 34, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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