Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Приджойнить таблицу к другой(ключ неуникальный) ? (число прочтений - 5777 )
bidler
Junior Member
**
Отсутствует



Сообщений: 68
Зарегистрирован: 06. Октября 2006
Приджойнить таблицу к другой(ключ неуникальный) ?
04. Сентября 2007 :: 05:59
Печать  
Есть две таблицы. В первой таблице есть неуникальное поле.
Нужно приджойнить вторую таблицу так чтобы она присоединялась только к одной строке первой таблице.
Что то типа LEFT JOIN, только не ко всем строкам совпадающим по ключу.
А только к одной,первой совпадающей по ключу.
Возможно такое ?

Сильно не бейте в SQL не силен. (да это и видно Улыбка)
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #1 - 04. Сентября 2007 :: 06:09
Печать  
А чем отличается первая строка от остальных (второй, третьей, и т.д.)?
  
Наверх
ICQ  
IP записан
 
bidler
Junior Member
**
Отсутствует



Сообщений: 68
Зарегистрирован: 06. Октября 2006
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #2 - 04. Сентября 2007 :: 06:20
Печать  
Есть поля: номер договора, дата начисления, сумма начисления.
Начислений может быть несколько по одному договору.
И нужно присобачить в первую строку, сумму оплаты по договору.
Даже если оплат было несколько, нужно показать что договор
оплачен вот на такую сумму.
Могу это сделать в индексированной таблице.
Но очень большое количество договоров - 150 000 в год.
Не хотелось бы тащить все это в оперативку - на клиента.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #3 - 04. Сентября 2007 :: 06:30
Печать  
На сколько я понял, сумма оплаты относится к договору, а не к конкретному начислению по этому договору. В таком случае думаю что надо цеплять просто по договору, и все дело сводится к тому, чтобы это грамотно вывести в отчет, в отчете отразить именно то, что сумма оплаты относится к договору вцелом, а не к начислению.
  
Наверх
ICQ  
IP записан
 
bidler
Junior Member
**
Отсутствует



Сообщений: 68
Зарегистрирован: 06. Октября 2006
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #4 - 04. Сентября 2007 :: 06:42
Печать  
Правильно понял, хотя я и туманно объясняю.
Начисления у меня лежат в одной временной таблице.
Сводная сумма оплаты по каждому договору - в другой.
Если сделать LEFT JOIN по договору то оплата войдет в выборку столько раз,
сколько начислений по договору.
А нужно ее вывести в первую же строчку, напротив договора.
И если еще есть начисления по договору то там колонка оплаты уже должна быть пуста.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #5 - 04. Сентября 2007 :: 06:47
Печать  
А что мешает именно так вывести отчет? Т.е. в первой записи по конкретному договору выводить оплату, а в остальных оплату не выводить.
  
Наверх
ICQ  
IP записан
 
bidler
Junior Member
**
Отсутствует



Сообщений: 68
Зарегистрирован: 06. Октября 2006
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #6 - 04. Сентября 2007 :: 06:56
Печать  
Так как это сделать SQL запросом ?
В этом и вопрос.
Если тащить это все в индексированную таблицу, то будет минимум 150 тыс.
начислений и еще 100 тыс. оплат.

Как "в первой записи по конкретному договору выводить оплату, а в остальных оплату не выводить. " ? SQL запросом ?
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #7 - 04. Сентября 2007 :: 07:02
Печать  
Вобщем, задача решается и плоской выборкой.

На самом деле тебе нужно понять, что решение задачи это не плоская выборка, а 2-х уровневая.
Уровни: Договор/НачисленияПоДоговору.
Есть еще такой вариант: применить group by .. with rollup, тогда сервер добавит к исходной выборке итоговые записи по договору, и тогда уже можно будет прицепить оплаты именно к ним, но (ВАЖНО) это будут не первые договоры, а именно итоговые записи по договору (т.е. дополнительные). В этом случае код вывода отчета будет несколько красивее. Вывод отчета будет именно 2-х уровневый.
  
Наверх
ICQ  
IP записан
 
bidler
Junior Member
**
Отсутствует



Сообщений: 68
Зарегистрирован: 06. Октября 2006
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #8 - 04. Сентября 2007 :: 07:09
Печать  
Я понял. Что выборка 2-х уровневая.
Но дело в том, что у большинства договоров будет, все-таки одно начисление.
И выводить после каждого договора итог не нужно. Ну поставили передо мной такую задачу Печаль
Как можно извратиться "плоской выборкой" ?

Пожалуйста, помогите !
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #9 - 04. Сентября 2007 :: 07:18
Печать  
Цитата:
Как "в первой записи по конкретному договору выводить оплату, а в остальных оплату не выводить. " ? SQL запросом ?

Причем тут SQL запрос. Здесь имеется в виду 1С-модуль формирования очета. Эти действия надо сделать при формировании самой mxl, и/или т.п.
  
Наверх
ICQ  
IP записан
 
bidler
Junior Member
**
Отсутствует



Сообщений: 68
Зарегистрирован: 06. Октября 2006
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #10 - 04. Сентября 2007 :: 07:22
Печать  
Я же писал, не хочется тащить на клиента таблицу оплат.

Но видно по другому никак Печаль
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #11 - 04. Сентября 2007 :: 07:23
Печать  
Ну суммы-то оплат ведь все равно надо тащить?
  
Наверх
ICQ  
IP записан
 
bidler
Junior Member
**
Отсутствует



Сообщений: 68
Зарегистрирован: 06. Октября 2006
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #12 - 04. Сентября 2007 :: 07:27
Печать  
Да, но они бы были в той выборке с договорами.
А так на клиенте выборка с договорами. И плюс еще таблица оплат.
Или что-то неправильно понимаю ?
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #13 - 04. Сентября 2007 :: 07:39
Печать  
bidler писал(а) 04. Сентября 2007 :: 07:27:
Да, но они бы были в той выборке с договорами.
А так на клиенте выборка с договорами. И плюс еще таблица оплат.
Или что-то неправильно понимаю ?

Похоже ты так и не понял ничего из того что я писал.
Тебе надо получить вот такую выборку: КодДоговора, СуммаОплаты, ДатаНачисления, СуммаНачисления.
Данные будут примерно такие:
234, 5000, 01.01.2007, 2000
234, 5000, 01.02.2007, 3000
236, 400, 01.03.2007, 500
237, 8000, 01.01.2007, 1000
237, 8000, 01.02.2007, 3000
237, 8000, 01.03.2007, 2000
237, 8000, 01.04.2007, 2000

И при выводе отчета (ПРИ ВЫВОДЕ ОТЧЕТА, ё-карны-бабай) сумму оплаты выводить только по первому договору, т.е. когда при получении следующей записи из плоской выборки код договора меняется, значит, блин это новый договор, и сумму оплаты выводим, иначе сумму оплаты не выводим. Это что, настолько сложно и уму не постижимо?

И без индекированной таблицы все делается.
  
Наверх
ICQ  
IP записан
 
bidler
Junior Member
**
Отсутствует



Сообщений: 68
Зарегистрирован: 06. Октября 2006
Re: Приджойнить таблицу к другой(ключ неуникальный
Ответ #14 - 04. Сентября 2007 :: 07:57
Печать  
Экономия памяти была бы за счет поля договор, которое присутствует
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать