Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Форматирование в сложном запросе (посоветуйте) (число прочтений - 5592 )
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 записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать