Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Наилучший из... (число прочтений - 7023 )
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Наилучший из...
18. Декабря 2011 :: 18:31
Печать  
Помогите, пожалуйста с идеей к реализации следующей проблемы.

Есть таблица с колонками:
Клиент, ТоргТочка, Агент, Показатель1, Показатель2, Показатель3

Необходимо для каждой связки Клиент+ТоргТочка выбрать одного Агента с наилучшим Показателем1 (если показатель1 одинаков у нескольких Агентов, то по показателю2, если и здесь равны, то по показателю3; если все три показателя равны у нескольких - то брать любого ОДНОГО)

Пример. Из следующей таблички:

Амор, Ленина, Иван, 20, 5, 1
Амор, Ленина, Иван, 10, 5, 1
Амор, Ленина, Кузя, 20, 7, 1
Амор, Ленина, Денис, 20, 7, 3

Выходит только одна строка:
Амор, Ленина, Денис, 20, 7, 3

П.С. Писать буду на языке запросов 8-ки
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: Наилучший из...
Ответ #1 - 19. Декабря 2011 :: 02:16
Печать  
ВЫБРАТЬ ПЕРВЫЕ 1
Клиент, Агент, Точка, Показатель1, Показатель2, Показатель3
ИЗ
БД
УПОРЯДОЧИТЬ ПО
Показатель1 УБЫВ,
Показатель2 УБЫВ,
Показатель3 УБЫВ
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #2 - 19. Декабря 2011 :: 04:47
Печать  
Очень довольный
В таблице как бы связка Клиент+ТоргТочка не одна.
Из такой таблички:

Амор, Ленина, Иван, 20, 5, 1
Амор, Ленина, Иван, 10, 5, 1
Амор, Ленина, Кузя, 20, 7, 1
Амор, Ленина, Денис, 20, 7, 3
РиК, Ленина, Иван, 20, 5, 1
РиК, Ленина, Иван, 10, 5, 1
РиК, Пушкина, Кузя, 20, 7, 1
РиК, Пушкина, Денис, 20, 7, 3

Должна получится такая:
Амор, Ленина, Денис, 20, 7, 3
РиК, Ленина, Иван, 20, 5, 1
РиК, Пушкина, Денис, 20, 7, 3
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #3 - 19. Декабря 2011 :: 05:20
Печать  

выбрать
     Таблица.Клиент,
     Таблица.ТоргТочка,
     максимум(Таблица.Агент) как Агент,
     максимум(Таблица.Показатель1) как Показатель1,
     максимум(Таблица.Показатель2) как Показатель2,
     максимум(Таблица.Показатель3) как Показатель3
из Таблица
внутреннее соединение
(
     выбрать
           Клиент,
           ТоргТочка,
           максимум(Показатель1*100+Показатель2*10+Показатель3) Показатель
     из Таблица
     сгруппировать по Клиент, ТоргТочка
)Точки по Точки.Клиент = Таблица.Клиент и Точки.ТоргТочка = Таблица.ТоргТочка
         и Точки.Показатель = (Таблица.Показатель1*100+Таблица.Показатель2*10+Таблица.Показатель3)
сгруппировать по Таблица.Клиент, Таблица.ТоргТочка

коэффициенты умножения подставить согласно размерности соответствующих числовых полей
  

1&&2&&3
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #4 - 19. Декабря 2011 :: 05:44
Печать  
Идею понял. Спасибо, красиво получается.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #5 - 21. Декабря 2011 :: 18:54
Печать  
А можно ли что-нибудь такое же красивое придумать, в случае, если исходная таблица будет иметь еще несколько колонок, по которым не надо ни группировать, ни сортировать, но которые нужны на выходе.

Клиент, ТоргТочка, Агент, Показатель1, Показатель2, Показатель3, Реквизит1, Реквизит2

Реквизит1 и Реквизит2 нужны ес-но той строчки, откуда мы взяли Агента.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #6 - 21. Декабря 2011 :: 19:22
Печать  
выбрать
     Таблица.Клиент,
     Таблица.ТоргТочка,
     Таблица.Агент,
     Таблица.Показатель1,
     Таблица.Показатель2,
     Таблица.Показатель3,
     Таблица.Реквизит1,
     Таблица.Реквизит2
из Таблица
внутреннее соединение
(
     выбрать
           Таблица.Клиент,
           Таблица.ТоргТочка,
           максимум(Таблица.Агент) как Агент
     из Таблица
     внутреннее соединение
     (
           выбрать
                 Клиент,
                 ТоргТочка,
                 максимум(Показатель1*100+Показатель2*10+Показатель3) Показатель
           из Таблица
           сгруппировать по Клиент, ТоргТочка
     )Точки по Точки.Клиент = Таблица.Клиент и Точки.ТоргТочка = Таблица.ТоргТочка
               и Точки.Показатель = (Таблица.Показатель1*100+Таблица.Показатель2*10+Таблица.Показатель3)
     сгруппировать по Таблица.Клиент, Таблица.ТоргТочка
)Агенты по Агенты.Клиент = Таблица.Клиент и Агенты.ТоргТочка = Таблица.ТоргТочка и Агенты.Агент = Таблица.Агент
  

1&&2&&3
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #7 - 22. Декабря 2011 :: 04:40
Печать  
Так скорее всего не прокатит.
Вот для такой таблички:

Амор, Ленина, Иван, 20, 5, 1, Рек1, Рек2
Амор, Ленина, Иван, 10, 5, 1, Рек3, Рек4


результат будет сама табличка с двумя строками, а должна остаться только одна (первая)
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #8 - 22. Декабря 2011 :: 05:02
Печать  
а что ключ Клиент, ТоргТочка, Агент не уникален?
И этот Иван - это один и тот же иван или это разные люди?
  

1&&2&&3
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #9 - 22. Декабря 2011 :: 05:16
Печать  
Да, в общем случае (Клиент + ТоргТочка + Агент) - не уникальны.
В примере "Иван" - один и тот же элемент
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Наилучший из...
Ответ #10 - 22. Декабря 2011 :: 05:26
Печать  
JohnyDeath писал(а) 22. Декабря 2011 :: 04:40:
Так скорее всего не прокатит.
Вот для такой таблички:

Амор, Ленина, Иван, 20, 5, 1, Рек1, Рек2
Амор, Ленина, Иван, 10, 5, 1, Рек3, Рек4


результат будет сама табличка с двумя строками, а должна остаться только одна (первая)


Мне одному кажется, что это противоречит исходной задаче?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #11 - 22. Декабря 2011 :: 05:39
Печать  
JohnyDeath писал(а) 22. Декабря 2011 :: 05:16:
В примере "Иван" - один и тот же элемент
и показатели по нему нужно не суммировать, а брать больший?
  

1&&2&&3
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Наилучший из...
Ответ #12 - 22. Декабря 2011 :: 05:39
Печать  
выбрать
    Таблица.Клиент,
    Таблица.ТоргТочка,
    Таблица.Агент,
    Таблица.Показатель1,
    Таблица.Показатель2,
    Таблица.Показатель3,
    Таблица.Реквизит1,
    Таблица.Реквизит2
из Таблица
внутреннее соединение
(
    выбрать
          Таблица.Клиент,
          Таблица.ТоргТочка,
          максимум(Таблица.Агент) как Агент,
          Точка.Показатель
    из Таблица
    внутреннее соединение
    (
          выбрать
                Клиент,
                ТоргТочка,
                максимум(Показатель1*100+Показатель2*10+Показатель3) Показатель
          из Таблица
          сгруппировать по Клиент, ТоргТочка
    )Точки по Точки.Клиент = Таблица.Клиент и Точки.ТоргТочка = Таблица.ТоргТочка
              и Точки.Показатель = (Таблица.Показатель1*100+Таблица.Показатель2*10+Таблица.Показатель3)
    сгруппировать по Таблица.Клиент, Таблица.ТоргТочка
)Агенты по Агенты.Клиент = Таблица.Клиент и Агенты.ТоргТочка = Таблица.ТоргТочка и Агенты.Агент = Таблица.Агент
              И Агенты.Показатель = (Таблица.Показатель1*100+Таблица.Показатель2*10+Таблица.Показатель3)
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #13 - 22. Декабря 2011 :: 07:16
Печать  
trad писал(а) 22. Декабря 2011 :: 05:39:
JohnyDeath писал(а) 22. Декабря 2011 :: 05:16:
В примере "Иван" - один и тот же элемент
и показатели по нему нужно не суммировать, а брать больший?

Надо брать строку, где Наилучший Показатель1. Если показатель1 одинаковый, то по наилучшему из показателя2, если  все три показателя одинаковые, то брать любую ОДНУ строку. Остальные данные (реквизит1 и реквизит2) нужно брать из выбранной строки.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #14 - 22. Декабря 2011 :: 07:19
Печать  
Satans Claws писал(а) 22. Декабря 2011 :: 05:39:
выбрать
    Таблица.Клиент,
    Таблица.ТоргТочка,
    Таблица.Агент,
    Таблица.Показатель1,
    Таблица.Показатель2,
    Таблица.Показатель3,
    Таблица.Реквизит1,
    Таблица.Реквизит2
из Таблица
внутреннее соединение
(
    выбрать
          Таблица.Клиент,
          Таблица.ТоргТочка,
          максимум(Таблица.Агент) как Агент,
          Точка.Показатель
    из Таблица
    внутреннее соединение
    (
          выбрать
                Клиент,
                ТоргТочка,
                максимум(Показатель1*100+Показатель2*10+Показатель3) Показатель
          из Таблица
          сгруппировать по Клиент, ТоргТочка
    )Точки по Точки.Клиент = Таблица.Клиент и Точки.ТоргТочка = Таблица.ТоргТочка
              и Точки.Показатель = (Таблица.Показатель1*100+Таблица.Показатель2*10+Таблица.Показатель3)
    сгруппировать по Таблица.Клиент, Таблица.ТоргТочка
)Агенты по Агенты.Клиент = Таблица.Клиент и Агенты.ТоргТочка = Таблица.ТоргТочка и Агенты.Агент = Таблица.Агент
              И Агенты.Показатель = (Таблица.Показатель1*100+Таблица.Показатель2*10+Таблица.Показатель3)

Так не пройдет, если все показатели у Агента в нескольких строках совпадают (если я правильно понял запрос).
Например:

Амор, Ленина, Иван, 20, 5, 1, Рек1, Рек2
Амор, Ленина, Иван, 20, 5, 1, Рек3, Рек4
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #15 - 22. Декабря 2011 :: 09:54
Печать  
неужели у таблицы нет первичного ключа?
  

1&&2&&3
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #16 - 22. Декабря 2011 :: 10:00
Печать  
Нет. Она сама по себе расчетная.
Я так понимаю, что единственный вариант - это каким-либо образом создать ключ-id и уже на основе этого как-то прыгать?
Если да, то тогда подскажите оптимальный способ как это сделать в языке запросов для 8-ки (где нет ни RowNumber, ни преобразования числа в строку)
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Наилучший из...
Ответ #17 - 22. Декабря 2011 :: 10:54
Печать  
А может ли быть такое:

Амор, Ленина, Иван, 20, 5, 1, Рек1, Рек2
Амор, Ленина, Иван, 20, 5, 1, Рек1, Рек2

или хотя бы такое:

Амор, Ленина, Иван, 20, 5, 1, Рек1, Рек2
Амор, Ленина, Иван, 20, 5, 1, Рек1, Рек4

?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #18 - 22. Декабря 2011 :: 11:03
Печать  
Вроде бы не должно. Но специально это нигде не оговорено.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #19 - 22. Декабря 2011 :: 11:08
Печать  
JohnyDeath писал(а) 22. Декабря 2011 :: 10:00:
Нет. Она сама по себе расчетная.
Я так понимаю, что единственный вариант - это каким-либо образом создать ключ-id и уже на основе этого как-то прыгать?
Если да, то тогда подскажите оптимальный способ как это сделать в языке запросов для 8-ки (где нет ни RowNumber, ни преобразования числа в строку)

думается нужно что то сделать с алгоритмом получения этой расчетной таблицы, что бы была возможность однозначно идентифицировать запись
  

1&&2&&3
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Наилучший из...
Ответ #20 - 23. Декабря 2011 :: 04:05
Печать  
Если Реквизит1, Рек2 (дополнительные поля) более менее типизированы - в рассчетной таблице делай еще одно поле, куда коннектируй строковые представления дополнительных полей.

Т.е. если Реквизит1 - справочник контрагенты/фирмы, Реквизит2 - банк.счет, то делай примерно так

Выбрать
...
Таблица.Реквизит1,
Таблица.Реквизит2
Выразить(IsNull(Контра.ИНН, IsNull(Фирмы.ИНН, "")) как Строка(20)) + Выразить(IsNull(Счета.Код, "") как Строка(20)) Ключ
Из
Таблица
Левое соединение Справочник.Контрагенты Контра по Контра.Ссылка = Таблица.Реквизит1
Левое соединение Справочник.Фирмы Фирмы по Фирмы.Ссылка = Таблица.Реквизит1
Левое Соединение Справочник.БанкСчета Счета По Счета.Ссылка = Таблица.Реквизит2

ну и предварительно групбай можно сделать (тупо по всем полям - просто, чтоб убрать дубли строк).



Если так не получится - то остается только 1 способ:
выборку из (Ответ #12) кидаем во временную таблицу,
а затем

Выбрать
...
Реквизит1,
реквизит2
Из
Таблица
Внутренне Соединение
(выбрать
...
max(реквизит1) МаксРеквизит1
из
Таблица
Сгруппировать По ...
) По ... = ... И Реквизит1 = МаксРеквизит1

и так выбирать топовые строки для каждого дополнительного реквизита.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #21 - 23. Декабря 2011 :: 08:59
Печать  
Идею понял. Спасибо.
Только вот конкатинация Кодов, Инн, Наименований оч не нравится. Можно, конечно, было б ссылки в строку, но 1С это не умеет.

А вообще какой самый простой способ проставить id строк таблиц на языке запросов 1С?
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Наилучший из...
Ответ #22 - 23. Декабря 2011 :: 09:27
Печать  
Самого простого, боюсь, не существует.

Выразить(Ссылка как Строка(40*)), помницо мне, снеговик не умеет
*(я не помню, гуид ссылки - чистые 36 символов, или же все-таки 40)
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #23 - 23. Декабря 2011 :: 09:38
Печать  
А самый простой из сложных? )

да, Выразить(Ссылка как Строка(40*)) - не умеет
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #24 - 23. Декабря 2011 :: 12:24
Печать  
ты расскажи откуда чудо таблица берется
  

1&&2&&3
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #25 - 23. Декабря 2011 :: 12:53
Печать  
Расчитываются все возможные варианты из имеющихся данных. Т.е. мы как бы для "Клиент+ТоргТочка" перебираем как было бы, если бы работал этот агент с такими-то параметрами, потом этот же с другими, потом другой со своими параметрами.
Затем, как вы поняли, выбирается одна наилучшая стратегия для связки "Клиент+ТоргТочка".

П.С. Терминологию (клиент, ТТ и т.п.) я взял для простоты понимания. У меня - льготы )
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #26 - 23. Декабря 2011 :: 15:18
Печать  
не, не то, меня физика интересует.
Ну там из ТЧ документов, движения/итоги регистров, срезы и т.п.
Из памяти, например из ТЗ, из внешних источников, еще что то.
  

1&&2&&3
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #27 - 23. Декабря 2011 :: 17:48
Печать  
Физика примерно такая:
Есть справочник Клиентов, справочник ТоргТочек и справочник торговых Агентов.
В регистре сведений хранится приоритет торговой точки (Показатель2).
У агентов периодически меняются "Усталость" (Реквизит1) и "Мотивация" (Реквизит2). На основе среза Усталости, Мотивации и Заявкам ТоргТочки (остатки регистра) по некоторому алгоритму рассчитывается ОжидаемоеПоступление (Показатель1). Показатель3 - остаток долга за Клиентом.
Т.о. в конце месяца мы рассчитываем для связки Клиент+ТоргТочка всех Агентов с их текущими Реквизитами и остатками по ТТ и Клиенту. Выбираем того агента, кто принесет наибольшее ОжидаемоеПоступление (Показатель1).
На одну ТТ в итоге должен быть только один агент.

Пример выдуман из головы по образу и подобию реалий, поэтому есть много допущений:
1. Здесь через ТТ однозначно определить Клиента нельзя
2. Один агент может быть в итоговой таблице у любого количества Клиент+ТТ
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Наилучший из...
Ответ #28 - 26. Декабря 2011 :: 03:04
Печать  
JohnyDeath писал(а) 23. Декабря 2011 :: 09:38:
А самый простой из сложных? )

да, Выразить(Ссылка как Строка(40*)) - не умеет


Не исключено, что это будет добавление реквизита Строка(40*) в соотв. справочники + подписка на событие записи, в которой в этот реквизит пихать строковое представление ГУИДа ссылки.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #29 - 26. Декабря 2011 :: 04:58
Печать  
Неее, это уже перебор. Для одного запроса мутить такое...
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #30 - 26. Декабря 2011 :: 05:54
Печать  
JohnyDeath писал(а) 23. Декабря 2011 :: 17:48:
Физика примерно такая:
на самом деле это опять логика Печаль
  

1&&2&&3
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Наилучший из...
Ответ #31 - 26. Декабря 2011 :: 08:46
Печать  
JohnyDeath писал(а) 26. Декабря 2011 :: 04:58:
Неее, это уже перебор. Для одного запроса мутить такое...


А конфа сильно нестандартная?
Помниццо, в стандартных конфах был какой-то долбанутый регистр сведений, что-то типо "Объекты обмена", где вводилось какое-то соовтествие ссылок и строковых идентификаторов...
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наилучший из...
Ответ #32 - 26. Декабря 2011 :: 08:59
Печать  
Мне кажется, что в данном случае проще всего добавить кусок кода в запрос, который проставит порядковые номера всем записям исходной таблицы.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Наилучший из...
Ответ #33 - 27. Декабря 2011 :: 03:01
Печать  
Что-то я не особо представляю как это сделать.
было бы можно что-то в духе:
добавить нулевую колонку "Нпп" в ВТ, а потом в цикле

Update Top 1 #ВТ
SET Нпп = 1 + select max(Нпп) from #ВТ
From #ВТ
Where
Нпп = 0

но запросы снеговика такое не позволяют, на сколько я знаю.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать