Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Форматирование в сложном запросе (посоветуйте) (число прочтений - 6056 )
Beria
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 33
Зарегистрирован: 10. Февраля 2009
Форматирование в сложном запросе (посоветуйте)
14. Марта 2009 :: 11:50
Печать  
Есть запрос:
Цитата:
           |SELECT DISTINCT $ДополнительныеКоды.ТипКода [ТипКода $Справочник.ТипыКодов]
           |      , ДополнительныеКоды.DESCR Наименование
           |FROM $Справочник.ДополнительныеКоды AS ДополнительныеКоды With (NOLOCK)
           |WHERE (ДополнительныеКоды.PARENTEXT = :Влад)
           |ORDER BY $ДополнительныеКоды.ТипКода
           |      , ДополнительныеКоды.DESCR
           |";


Смысл в следующем: надо для всех оригинальный колонок ТипКода давать строковую котангенация ДополнительныхКодов, типа

ТипКода                ДополнительныеКоды

ОтПоставщиков  12,15487,4858

Сейчас пишет
ТипКода                ДополнительныеКоды

ОтПоставщиков  12
ОтПоставщиков  15487
ОтПоставщиков  4858

и
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #1 - 15. Марта 2009 :: 04:48
Печать  
Пиши функцию, в которую будешь передавать ТипКода, там сформируешь выборку ДопКодов по этому Типу, и обходом этой выборки получишь нужную тебе строку
  
Наверх
ICQ  
IP записан
 
Beria
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 33
Зарегистрирован: 10. Февраля 2009
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #2 - 15. Марта 2009 :: 05:49
Печать  
Я тупой.... я не понял..... Это значит мне запрос в цикле надо проводить........справочник то огроооооомный.......
Можно кодом бросить?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #3 - 15. Марта 2009 :: 11:03
Печать  
SELECt А.Поле1+В.Поле2
From A,B

все возможные комбинации
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #4 - 15. Марта 2009 :: 13:08
Печать  
kiruha писал(а) 15. Марта 2009 :: 11:03:
SELECt А.Поле1+В.Поле2
From A,B

все возможные комбинации

Дык ему надо из одного поля.
  
Наверх
ICQ  
IP записан
 
Beria
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 33
Зарегистрирован: 10. Февраля 2009
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #5 - 15. Марта 2009 :: 14:10
Печать  
Вот именно, из одного поля, а поскольку с сиквелом пока только разбираюсь поэтому в дауне.... Соображений ноль...... Плачущий
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #6 - 15. Марта 2009 :: 19:18
Печать  
Beria писал(а) 15. Марта 2009 :: 14:10:
Вот именно, из одного поля, а поскольку с сиквелом пока только разбираюсь поэтому в дауне.... Соображений ноль...... Плачущий

сиквел - это попытка реализовать запросы, аналогичные словарным: "Выбрать А,Б,В из Таблицы1 Где С=45". Попробуй в таких же словах объяснить компу свою выборку. У меня лично не получилось. Поэтому и говорю про функцию, либо про курсоры. Т.е. запрос будет вида "Select Код, МояСтрокаИзКода(Код) From MyTable Where ..." Где МояСтрокаИзКода - это будет скульная функция, в которой каким либо образом получаем выборку ДопКодов из твоего Кода и обходом этой выборки формируем нужную строку. Пример посмотри, например, вот тут: http://www.sql.ru/faq/faq_topic.aspx?fid=130
  
Наверх
ICQ  
IP записан
 
Beria
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 33
Зарегистрирован: 10. Февраля 2009
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #7 - 16. Марта 2009 :: 07:54
Печать  
Блин...... у меня ничего не получается......  Плачущий Плачущий Этот вопрос почти не освещен в доках к 1с++
Даже верификация метапарсера не проходит............   Сутки мучаюсь, помогите, а.......
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #8 - 16. Марта 2009 :: 08:31
Печать  
А в 1sqlite есть ф-ия "group_concat": http://www.sqlite.org/lang_aggfunc.html
Я так понимаю, это именно то, что тебе нужно
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #9 - 16. Марта 2009 :: 10:59
Печать  
С 2005 в SQL есть тоже "пользовательские статистические функции"
http://msdn.microsoft.com/ru-ru/library/ms131057.aspx
Создаешь групповую конкатенацию - и вуаля
  
Наверх
 
IP записан
 
Beria
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 33
Зарегистрирован: 10. Февраля 2009
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #10 - 16. Марта 2009 :: 11:17
Печать  
У меня 2000 SQL Плачущий
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #11 - 16. Марта 2009 :: 11:48
Печать  
Beria писал(а) 16. Марта 2009 :: 07:54:
Блин...... у меня ничего не получается......  Плачущий Плачущий Этот вопрос почти не освещен в доках к 1с++
Даже верификация метапарсера не проходит............   Сутки мучаюсь, помогите, а.......

Блин, каким образом Скульный запрос должен быть освещен в доках 1С++? Это чисто вопрос по SQL. Но я бы не стал решать его таким методом, т.к. по оптыу знаю, что если задача получается слишком сложной, значит что-то не так в постановке задачи. Попробуй для начала объяснить - ЗАЧЕМ тебе нужна именно такая выборка.
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #12 - 16. Марта 2009 :: 11:52
Печать  
Beria писал(а) 16. Марта 2009 :: 11:17:
У меня 2000 SQL Плачущий

Чем не устраивает вариант из ссылки №6 ?
http://www.sql.ru/faq/faq_topic.aspx?fid=130
Только что проверил под sql 200 в qa все работает
чуть упростил их пример
вот тексты
есть таблица
Код
Выбрать все
USE tempdb
GO
CREATE TABLE dbo.TEST(type INTEGER, name VARCHAR(100))
GO

INSERT dbo.TEST VALUES(1, 'Молоко')
INSERT dbo.TEST VALUES(1, 'Сметана')
INSERT dbo.TEST VALUES(2, 'Гвозди')
INSERT dbo.TEST VALUES(3, 'Машины')
INSERT dbo.TEST VALUES(2, 'Клей')
INSERT dbo.TEST VALUES(2, 'Доски')
INSERT dbo.TEST VALUES(3, 'Автобус')
GO
 



Создаем функцию :
Код
Выбрать все
CREATE FUNCTION dbo.GetDescription(@id INTEGER)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @Result VARCHAR(8000)
SET @Result = ''
SELECT @Result = @Result + name +  ',' FROM dbo.TEST WHERE type = @id
RETURN '"' + RTRIM(@Result) + '"'
END
GO
 




Вызываем select тот который нужен тебе
Код
Выбрать все
SELECT DISTINCT type, dbo.GetDescription(type) FROM TEST
 


ну можно чуть подправить чтобы не было последней запятой ну это уж сам сделай.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #13 - 16. Марта 2009 :: 13:11
Печать  
Z1 писал(а) 16. Марта 2009 :: 11:52:
Чем не устраивает вариант из ссылки №6 ?


То что функция использует запрос для каждой строки выборки.
А если 1000 строк?

Уж лучше просто в ТЗ результата запроса пройтись построчно ...
Или статистическую свою.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #14 - 16. Марта 2009 :: 13:24
Печать  
kiruha писал(а) 16. Марта 2009 :: 13:11:
Z1 писал(а) 16. Марта 2009 :: 11:52:
Чем не устраивает вариант из ссылки №6 ?


То что функция использует запрос для каждой строки выборки.
А если 1000 строк?

Уж лучше просто в ТЗ результата запроса пройтись построчно ...
Или статистическую свою.

об оптимизации не было ни слова
сколько строк в справочнике ничего не сказано.
Если мало то можно и нечего не оптимизировать.
ну и выше представленный запрос
SELECT type,dbo.GetDescription(type) FROM TEST
легко изменить в оптимизированный запрос
Код
Выбрать все
SELECT type,dbo.GetDescription(type)
FROM (
SELECT DISTINCT type FROM TEST as t1 ) as a1
 







  
Наверх
 
IP записан
 
Beria
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 33
Зарегистрирован: 10. Февраля 2009
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #15 - 16. Марта 2009 :: 14:11
Печать  
kiruha писал(а) 16. Марта 2009 :: 13:11:
Z1 писал(а) 16. Марта 2009 :: 11:52:
Чем не устраивает вариант из ссылки №6 ?


То что функция использует запрос для каждой строки выборки.
А если 1000 строк?

Уж лучше просто в ТЗ результата запроса пройтись построчно ...
Или статистическую свою.


А 16 тыщ строк не хотите? Я не шучу, у меня во время прохода ТЗ люди ждут и ругаются........... Вот такой подчиненный к номенклатуре справочник у меня (
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #16 - 16. Марта 2009 :: 14:35
Печать  
А нафига пользователям отчет в 16К строк??
Я понимаю, если для каких-то служебных обработок типа обмена, выгрузки и т.д.

Пользователи все равно такой большой объем никогда не будут обрабатывать, будут смотреть только итоговые цифры.

Расскажешь свою задачу?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #17 - 16. Марта 2009 :: 14:39
Печать  
Beria писал(а) 16. Марта 2009 :: 14:11:
kiruha писал(а) 16. Марта 2009 :: 13:11:
Z1 писал(а) 16. Марта 2009 :: 11:52:
Чем не устраивает вариант из ссылки №6 ?


То что функция использует запрос для каждой строки выборки.
А если 1000 строк?

Уж лучше просто в ТЗ результата запроса пройтись построчно ...
Или статистическую свою.


А 16 тыщ строк не хотите? Я не шучу, у меня во время прохода ТЗ люди ждут и ругаются........... Вот такой подчиненный к номенклатуре справочник у меня (


не понял
16 тысяч строк для каждого типа и сколько тогда типов ( тогда что-то в постановке задачи не так  - задачу в студию )
или всего 16 тысяч строк в таблице ?
Ты пост 14 читал ?

  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #18 - 16. Марта 2009 :: 15:59
Печать  
Можно тоже в тему спрошу. Во всех приведённых примерах используется Select * From Tablename, а как быть если запрос хитрее?
К примеру, мы получаем данные в приведённой выборке не напрямую из таблицы, а в подзапросе. Как использовать сложение строк?

Совсем реальный пример: в регистре измерения "Товар", "Клиент" и ресурс "Количество" (храним заказанный товар). В ВТ получаем выборку выборку вида
Товар-sum(Количество), и к ним нужно добавить строкой наименования клиентов, которые сделали заказ. Как тут быть?

зы Исходники group_concat() не нашёл, по описанию она вроде бы то что надо
  
Наверх
 
IP записан
 
Beria
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 33
Зарегистрирован: 10. Февраля 2009
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #19 - 16. Марта 2009 :: 20:06
Печать  
Z1 писал(а) 16. Марта 2009 :: 14:39:
не понял
16 тысяч строк для каждого типа и сколько тогда типов ( тогда что-то в постановке задачи не так  - задачу в студию )
или всего 16 тысяч строк в таблице ?
Ты пост 14 читал ?



Задача проста Есть номенклатура, есть подчиненный справочник доп коды  жутких объемов (струтктуру менять нельзя). Надо его содержимое выводить в более приемлимом виде......... причем максимально быстро. Стандартный запрос 1с не рулит, медленно.......
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #20 - 17. Марта 2009 :: 04:01
Печать  
Beria писал(а) 16. Марта 2009 :: 20:06:
Задача проста Есть номенклатура, есть подчиненный справочник доп коды  жутких объемов (струтктуру менять нельзя). Надо его содержимое выводить в более приемлимом виде......... причем максимально быстро. Стандартный запрос 1с не рулит, медленно.......

Что есть "в более приемлимом виде"? Если уж через Ваши запятые, то формируй эту строку ТОЛЬКО при выводе строки на экран (ибо какой смысл по невидимым строкам рассчитывать каждый раз эти ДопКоды)
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #21 - 17. Марта 2009 :: 04:07
Печать  
pavel_tr писал(а) 16. Марта 2009 :: 15:59:
Можно тоже в тему спрошу. Во всех приведённых примерах используется Select * From Tablename, а как быть если запрос хитрее?
К примеру, мы получаем данные в приведённой выборке не напрямую из таблицы, а в подзапросе. Как использовать сложение строк?

Совсем реальный пример: в регистре измерения "Товар", "Клиент" и ресурс "Количество" (храним заказанный товар). В ВТ получаем выборку выборку вида
Товар-sum(Количество), и к ним нужно добавить строкой наименования клиентов, которые сделали заказ. Как тут быть?

зы Исходники group_concat() не нашёл, по описанию она вроде бы то что надо

1) А в каком бизнес-процессе можно воспользоваться информацией вида "Товар: Молоко; ОбщееЗаказанноеКоличество:1500; Клиенты:Иванов,Петров,Сидоров"?
2) Если уж совсем надо пользоваться такой информацией, то лично я бы одновременно с записью в регистр писал бы тогда данные и в спец СКЛ-базу, чтобы получать далее простую выборку вида "Select * From Tablename"
  
Наверх
ICQ  
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #22 - 17. Марта 2009 :: 05:10
Печать  
Salimbek писал(а) 17. Марта 2009 :: 04:07:
1) А в каком бизнес-процессе можно воспользоваться информацией вида "Товар: Молоко; ОбщееЗаказанноеКоличество:1500; Клиенты:Иванов,Петров,Сидоров"?

Передо мной такую задачу как раз поставили! Мы книгами торгуем. Пока сделал формирование строки при выводе таблицы по каждой строке, но хочется сделать одним запросом

Salimbek писал(а) 17. Марта 2009 :: 04:07:
2) Если уж совсем надо пользоваться такой информацией, то лично я бы одновременно с записью в регистр писал бы тогда данные и в спец СКЛ-базу, чтобы получать далее простую выборку вида "Select * From Tablename"

Можно делать Select во временную таблицу при формировании отчёта, зачем же так усложнять? А потом тот же Select * From Tablename подойдёт. Думал может покрасивше получится
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #23 - 17. Марта 2009 :: 05:33
Печать  
pavel_tr писал(а) 17. Марта 2009 :: 05:10:
Salimbek писал(а) 17. Марта 2009 :: 04:07:
1) А в каком бизнес-процессе можно воспользоваться информацией вида "Товар: Молоко; ОбщееЗаказанноеКоличество:1500; Клиенты:Иванов,Петров,Сидоров"?

Передо мной такую задачу как раз поставили! Мы книгами торгуем. Пока сделал формирование строки при выводе таблицы по каждой строке, но хочется сделать одним запросом

Salimbek писал(а) 17. Марта 2009 :: 04:07:
2) Если уж совсем надо пользоваться такой информацией, то лично я бы одновременно с записью в регистр писал бы тогда данные и в спец СКЛ-базу, чтобы получать далее простую выборку вида "Select * From Tablename"

Можно делать Select во временную таблицу при формировании отчёта, зачем же так усложнять? А потом тот же Select * From Tablename подойдёт. Думал может покрасивше получится


кто мешает одним sql запросом получить упорядоченную по ДопКод таблицу
ДопКод , Товар
или в твоем случае
Товар, колво, Клиент
и делать конкатенацию строк в 1с за один проход т.к. таблица уже упорядочена по товарам ?
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #24 - 17. Марта 2009 :: 06:09
Печать  
pavel_tr писал(а) 17. Марта 2009 :: 05:10:
Передо мной такую задачу как раз поставили! Мы книгами торгуем. Пока сделал формирование строки при выводе таблицы по каждой строке, но хочется сделать одним запросом

Извини, но мой вопрос был - "В каком бизнес-процессе?", вот ну не могу я понять, что может дать информация "Заказано 500 книг, такими-то контрагентами" Все равно надо раскидывать заказ по каждому контрагенту персонально.
Z1 писал(а) 17. Марта 2009 :: 05:33:
кто мешает одним sql запросом получить упорядоченную по ДопКод таблицу
ДопКод , Товар
или в твоем случае
Товар, колво, Клиент
и делать конкатенацию строк в 1с за один проход т.к. таблица уже упорядочена по товарам ?

ИМХО, удобнее Индексированной таблицей воспользоваться и ее методом "Группировать"
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #25 - 17. Марта 2009 :: 07:47
Печать  
Salimbek писал(а) 17. Марта 2009 :: 06:09:
Извини, но мой вопрос был - "В каком бизнес-процессе?", вот ну не могу я понять, что может дать информация "Заказано 500 книг, такими-то контрагентами" Все равно надо раскидывать заказ по каждому контрагенту персонально.


В принципе отображение через запятую требуется достаточно часто.
У нас это - перечень машин перевозящих заказ, даты оплаты по счету.
Можно конечно формировать отдельную строку или(и) колонки - но для восприятия неудобно - отчет разрастается

По сабжу присоединюсь - эту колнку (с запятыми) лучше получать отдельным запросом в ТЗ и из ТЗ
при выводе ячейки на экран (либо - статист функция и SQL 2005).
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Форматирование в сложном запросе (посоветуйте)
Ответ #26 - 17. Марта 2009 :: 10:22
Печать  
Вывод подобной строки естественно нужен только для доп.информации. При всех обработках конечно же заказы берутся по клиентам отдельно.
Формирование строки из 1С при выводе - вполне рабочий вариант, просто так исторически сложилось, что есть отлаженный запрос (делался раньше), к которому такую вот строку надо прикрутить. Переписывать алгоритм формирования таблицы не очень хочется, там достаточно наворочено... Вот и возникла идея с формированием строки с помощью SQL
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать