Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Помогите с SQL запросом! (проблема - несколько произвольных периодов) (число прочтений - 2573 )
Stella0608
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Помогите с SQL запросом! (проблема - несколько произвольных периодов)
25. Июня 2010 :: 12:09
Печать  
В общем такая проблема.
Сам отчет на самом деле более сложной формы, но я это уже поборола.
Поясню на более простом примере.
Есть записи в регистре типа
Дата - Клиент - Товар - Склад - Количество - Сумма (регистр оборотный).
И есть таблица периодов. Она может быть произвольной.
В ней может быть минимум один период, максимум не ограничено (ну 100 таки вряд ли будет, а вот десяток запросто).
Причем периоды могут быть и не равными (скорее всего равными, но не факт)
Например
С 01.01.10 по 10.10.10
С 11.10.10 по 25.02.10
С 26.02.10 по 31.03.10.
Проблема: надо запросом выцепить табличку вида
Клиент - Товар - Склад - Количество за период 1 - Сумма за период 1 - Количество за период 2 - Сумма за период 2... Сумма за период n
Причем если у клиента продажи были только в n-м периоде, он все равно должен присутствовать, и в колонках должны стоять нули.
У меня уже мозг плавится, как это проще сделать.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите с SQL запросом! (проблема - несколько произвольных периодов)
Ответ #1 - 25. Июня 2010 :: 12:12
Печать  
табличка по периодам + левое соедиенние с табличкой по регистру.
  
Наверх
 
IP записан
 
Stella0608
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Re: Помогите с SQL запросом! (проблема - несколько произвольных периодов)
Ответ #2 - 25. Июня 2010 :: 12:19
Печать  
Что в данном случае табличка по периодам?
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Помогите с SQL запросом! (проблема - несколько произвольных периодов)
Ответ #3 - 25. Июня 2010 :: 12:23
Печать  
Можно конечно попробовать определить минимальный период, от него плясать в параметре РегистрОбороты (День, Неделя, Месяц и т.д.).
Собственно потом можно построить выборку
Код
Выбрать все
select [измерения], sum(КоличествоОборот1) Количество1
from (select измерение1, измерение2, измерение3,
	  case when НачалоПериода between НачалоПериода1 and КонецПериода1 then КоличествоОборот else 0 end as КоличествоОборот1
    from ) as Обороты) as Распределение
group by [Измерения] 


Не знаю, может кто еще что поумнее и оптимальнее придумает.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Stella0608
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Re: Помогите с SQL запросом! (проблема - несколько произвольных периодов)
Ответ #4 - 25. Июня 2010 :: 12:29
Печать  
У меня проблема в том, что базой отчета являются эти сами движения оборотного регистра. Но потом там еще идет масса монстрообразных джойнов к разным табличкам, потому что там еще с десяток фильтров и переменных группировок. Саму штатную 1ску даже не рассматриваю - с переменными группировками у нее правда все красиво, но вот на таких объемах она просто затыкается.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите с SQL запросом! (проблема - несколько произвольных периодов)
Ответ #5 - 25. Июня 2010 :: 13:09
Печать  
Stella0608 писал(а) 25. Июня 2010 :: 12:19:
Что в данном случае табличка по периодам?

Ну вы же пишите, что у вас она уже есть - табличка периодов.
ЗЫ: посмотрите статью про прямые запросы в FAQ, там есть для дбф варианта разварот по разным периодам - день, неделя, квартал.. сделайте по аналогии, только с произвольными периодами.

  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите с SQL запросом! (проблема - несколько произвольных периодов)
Ответ #6 - 25. Июня 2010 :: 13:09
Печать  
Я так думаю что самый оптимальный вариант
1) Таблица периодов с полями Дата;Период - для соединения по дате документа и получению периода.
Далее на самом верхнем уровне запроса группировка уже по периоду а потом обход через индексированную таблицу и вывод на печать.
  
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите с SQL запросом! (проблема - несколько произвольных периодов)
Ответ #7 - 25. Июня 2010 :: 13:17
Печать  
можешь и так сделать, табличка периодов. поля дата и период, чтоб было в таком виде:

date                  period
01.01.10      01.01.10 - 01.02.10      
02.01.10      01.01.10 - 01.02.10 
.........................
10.02.10      10.02.10 - 12.02.10

т.е разворачиваешь по всем датам, а далее просто:
селект к этой табличке + левое соединение к регистру с условием по дате, и потом группировкой по периоду
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите с SQL запросом! (проблема - несколько произвольных периодов)
Ответ #8 - 25. Июня 2010 :: 13:19
Печать  
Eprst писал(а) 25. Июня 2010 :: 13:17:
можешь и так сделать, табличка периодов. поля дата и период, чтоб было в таком виде:

date                  period
01.01.10      01.01.10 - 01.02.10      
02.01.10      01.01.10 - 01.02.10  
.........................
10.02.10      10.02.10 - 12.02.10

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

Я именно про это и говорил.
  
Наверх
IP записан
 
Stella0608
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Re: Помогите с SQL запросом! (проблема - несколько произвольных периодов)
Ответ #9 - 25. Июня 2010 :: 13:38
Печать  
У меня к сожалению есть некоторые проблемы в знаниях SQL.
А именно: я хорошо стыкую внутренние таблицы уже готовые таблицы базы.
Но я понятия не имею, как
"селект к этой табличке".
Т.е. как сделать селект таблицы значений 1с к SQL таблицы БД?!
Вроде в восьмерке что-то такое было, но в семерке точно нет.
Также я к сожалению не умею создавать внутренние таблицы SQL. Т.е. если есть таблица справочника - я могу с ней работать. А вот нарисовать самой на языке SQL я не знаю как Печаль.
Буду признательна, если мне кто-нибудь пояснит это.

>обход через индексированную таблицу
что такое индексированная таблица?
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Помогите с SQL запросом! (проблема - несколько произвольных периодов)
Ответ #10 - 25. Июня 2010 :: 13:54
Печать  
Ээ кагбэ объяснить Улыбка
В общем по сути своего вопроса если не разберешься стучи в ICQ 201216890 вечером или на выходных если в онлайне буду постараюсь помочь.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать