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

Откуда:
Сообщений: 56
Уважаемые форумчане.
Возникла тут перед геологом задачка, не совсем мне по силам, прошу помочь.
Исходные данные:
Имеется таблица в которой указаны: ID,Номер скважины,Интервал от, Интервал До, Код

Пример: 1 Скв1 00 10 А
1 Скв1 10 15 Б
1 Скв1 15 20 Б
1 Скв1 20 25 А
1 Скв1 25 30 Б
Требуется получить: 1 Скв1 00 10 А
1 Скв1 10 20 Б
1 Скв1 20 25 А
1 Скв1 25 30 Б
То есть если в идущих друг за другом глубинах совпадают коды, слить в один большой интервал.
Честно говоря не знаю, как решить это на SQL прошу, хотя бы общую подсказку, какими функциями воспользоваться.
5 апр 13, 13:11    [14140000]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Mikhails
как решить это на SQL

Зависит от того, какая у вас версия:
select @@version
5 апр 13, 13:14    [14140018]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Mikhails
Member

Откуда:
Сообщений: 56
Гость333,

Ms Sql 2008 Prof
5 апр 13, 13:15    [14140025]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1935
Mikhails,

Если совпадает номер скважины и код? Или на номер скважины плевать?
5 апр 13, 13:43    [14140203]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Mikhails
Member

Откуда:
Сообщений: 56
DaniilSeryi,
Номер скважины и код должны совпадать, у меня много скважин в данной таблице.
При этом обьеденять конечно нужно только интервалы идущее по порядку с единым кодом.
5 апр 13, 13:51    [14140267]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
aleks2
Guest
declare @rc int = 1;

while @rc > 0 begin
  update T set [Интервал До] = TT.[Интервал До]
    from [Имеется таблица] T inner join [Имеется таблица] TT 
       on 
       -- T.ID = TT.ID and -- непонятна роль ID
       T.[Номер скважины] = TT.[Номер скважины] and
       T.[Код] = TT.Код and
       T.[Интервал До] = TT.[Интервал от];
   set @rc = @@rowcount;

  delete T 
    from [Имеется таблица] T inner join [Имеется таблица] TT 
       on 
       -- T.ID = TT.ID and -- непонятна роль ID
       T.[Номер скважины] = TT.[Номер скважины] and
       T.[Код] = TT.Код and
       T.[Интервал До] = TT.[Интервал До] and
       TT.[Интервал от] < T.[Интервал от]  and T.[Интервал от] < TT.[Интервал До]
      
end;
5 апр 13, 13:54    [14140293]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
aleks2,

чет навреное ему выбока нужна скорее всего,а не подправка таблицы..хотя ХЗ ,все равно ТЗ еще толком не озвученно
5 апр 13, 14:04    [14140362]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Mikhails
Member

Откуда:
Сообщений: 56
aleks2, Предпологается создание второй таблицы ТТ? или я не правильно понимаю?
5 апр 13, 14:05    [14140370]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Mikhails
Member

Откуда:
Сообщений: 56
Maxx,

Нужна именно выборка, даже я бы сказал временная (виртуальная таблица) в которой будут помещены данные в столбцы аналогичные имеющейся таблицы, с учётом слияния интервалов.
5 апр 13, 14:07    [14140383]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Mikhails,

Построчный коммит в update - похоже ?
5 апр 13, 14:11    [14140415]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Mikhails
Member

Откуда:
Сообщений: 56
Maxx,

Честно сказать есть схожесть, но мне до конца не видна. Может завал работы отупляет так..
Дело в том, что мне апдейтить мою таблицу не нужно.
Я опишу задачу человеческим языком.. может сниму все вопросы:
5 апр 13, 14:18    [14140483]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Mikhails,

там в моем примере апдейта нигде и нет,там выборка..просто задача очнеь похожа - подбить по группам нарастающий итог,как я себе вашу задачу понял
5 апр 13, 14:20    [14140504]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
aleks2
Guest
Mikhails
Maxx,

Нужна именно выборка, даже я бы сказал временная (виртуальная таблица) в которой будут помещены данные в столбцы аналогичные имеющейся таблицы, с учётом слияния интервалов.

Ну дык, сделай копию.
5 апр 13, 14:26    [14140562]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Mikhails
Member

Откуда:
Сообщений: 56
Maxx,

Есть таблица описывающая изменения пород в скважинах с глубиной.
В ней есть название месторождения, номер скважины, глубина от, глубина до, описание породы.
Если в таблице встречается случай: если в скважине случаются описания идущие друг за другом (по глубинам) и имеющие одно и то же описание (например Песок) Нужно слить данные интервалы глубин. На картинке может более понятно.

К сообщению приложен файл. Размер - 40Kb
5 апр 13, 14:27    [14140563]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а какой нить примари кей в таблице есть ? Как узнать,что 2 записи рядом..или просто пофиг
если SITE_ID =SITE_ID and LITH =LITH and DEPTH_TO = DEPTH_FROM ? найти границы диапазонов ?
5 апр 13, 14:31    [14140595]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Mikhails
Member

Откуда:
Сообщений: 56
Maxx,
Primary key составной Site_ID,Depth_from
5 апр 13, 14:37    [14140642]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Mikhails
Member

Откуда:
Сообщений: 56
Maxx,

Вопрос, как узнать, что две записи рядом волнует и меня, возможно тут нужно делать, что-то с установкой курсора.
Типа поставить его вверх таблицы и считывать построчно каждую строчку..
5 апр 13, 14:39    [14140653]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Mikhails
Member

Откуда:
Сообщений: 56
Maxx
а какой нить примари кей в таблице есть ? Как узнать,что 2 записи рядом..или просто пофиг
если SITE_ID =SITE_ID and LITH =LITH and DEPTH_TO = DEPTH_FROM ? найти границы диапазонов ?


Ну получается определение последовательной записи именно такое, только Depth_from строки должно быть равно Depth_to из строки выше.
5 апр 13, 14:40    [14140661]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Mikhails,

как найдете "верх" таблицы - скажете ;)
а "рядом" ,исходя из вашего условия вроде таки ето
автор
SITE_ID =SITE_ID and LITH =LITH and DEPTH_TO = DEPTH_FROM

Ну и не очень понятно..у вас могут в одной скажине на одной глубине начинаться разные LITH ?
5 апр 13, 14:43    [14140685]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Maxx
Ну и не очень понятно..у вас могут в одной скажине на одной глубине начинаться разные LITH ?

Дык,
автор
Primary key составной Site_ID,Depth_from
5 апр 13, 14:46    [14140710]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Гость333,

Дык,я и спрашиваю об етом..бо чет странно откровенно. Хотя может я просто не силен в земледелие
5 апр 13, 14:47    [14140719]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Maxx
может я просто не силен в земледелие

Назвать геолога земледельцем — это сильно ;-)
5 апр 13, 14:49    [14140740]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
babaEGA
Member

Откуда: Москва
Сообщений: 289
Maxx
Гость333,

Дык,я и спрашиваю об етом..бо чет странно откровенно. Хотя может я просто не силен в земледелие

Насколько я понимаю, скважина 1 - первые 10 метров например вода, 10-15 и 15-20 - песок, 20-40 метров глина, 40-50 вода, 50-60 тоже вода. Это типичная задача на интервалы.
5 апр 13, 14:52    [14140755]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Mikhails
Member

Откуда:
Сообщений: 56
babaEGA
Maxx
Гость333,

Дык,я и спрашиваю об етом..бо чет странно откровенно. Хотя может я просто не силен в земледелие

Насколько я понимаю, скважина 1 - первые 10 метров например вода, 10-15 и 15-20 - песок, 20-40 метров глина, 40-50 вода, 50-60 тоже вода. Это типичная задача на интервалы.


Вот точно понято :) именно так, интервалы 0-10 - песчаник, 10-15 песок, 15-20 песок, 20-30 глины, а должно быть: 0-10 песчаник, 10-20 песок, 20-30 глины... ну не знаю, как ещё написать объяснение.
5 апр 13, 14:56    [14140780]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение по строкам  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Гость333
Назвать геолога земледельцем — это сильно ;-)

:)
5 апр 13, 14:58    [14140793]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить