Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) как составить запрос? (число прочтений - 4519 )
pisarev
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Местоположение: Новосибирск
Зарегистрирован: 09. Августа 2013
Пол: Мужской
как составить запрос?
28. Августа 2014 :: 03:55
Печать  
есть регистр остатков с измерениями "Товар" и "НомСтрДок",
положим в таблице есть только 2 записи:
"А"|1 и "А"|2 (т.е. в некомент докмуенте толкнувшем регистр товар "А" в строке №1 и №2).
как построить запрос к регистру с получением группировки по "составному реквизиту": код товара+номер строки? Т.е. должно быть не две группировки "Товар","НомСтрДок", а ОДНА
переменная запроса должна формироваться "на лету" (???) как код товара + Строка(номер стр. дока)
  

хотел как лучше, а получилось как всегда Печаль
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: как составить запрос?
Ответ #1 - 28. Августа 2014 :: 04:52
Печать  
pisarev писал(а) 28. Августа 2014 :: 03:55:
есть регистр остатков с измерениями "Товар" и "НомСтрДок",
положим в таблице есть только 2 записи:
"А"|1 и "А"|2 (т.е. в некомент докмуенте толкнувшем регистр товар "А" в строке №1 и №2).
как построить запрос к регистру с получением группировки по "составному реквизиту": код товара+номер строки? Т.е. должно быть не две группировки "Товар","НомСтрДок", а ОДНА
переменная запроса должна формироваться "на лету" (???) как код товара + Строка(номер стр. дока)

типа:
Код
Выбрать все
select Concat(Товар,'%#',cast(НомСтрДок as varchar(12)), count(*) from ... group by Concat(Товар,'%#',cast(НомСтрДок as varchar(12)) 

  
Наверх
ICQ  
IP записан
 
pisarev
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Местоположение: Новосибирск
Зарегистрирован: 09. Августа 2013
Пол: Мужской
Re: как составить запрос?
Ответ #2 - 28. Августа 2014 :: 04:59
Печать  
можете прокоментировать способ решения?
  

хотел как лучше, а получилось как всегда Печаль
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: как составить запрос?
Ответ #3 - 29. Августа 2014 :: 07:09
Печать  
А что тут комментировать, т.к. надо группировку по составному реквизиту, то и формируем составной реквизит через Concat. Единственно - добавил некоторый "мусор" '%#' - чтобы гарантированно исключить варианты, когда "Товар" в строке 11 будет пересекаться с "Товар1" в строке 1.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: как составить запрос?
Ответ #4 - 29. Августа 2014 :: 07:16
Печать  
Ну, только там не товар надо брать, а его код.. ну да ладно
  
Наверх
 
IP записан
 
pisarev
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Местоположение: Новосибирск
Зарегистрирован: 09. Августа 2013
Пол: Мужской
Re: как составить запрос?
Ответ #5 - 29. Августа 2014 :: 10:14
Печать  
Salimbek писал(а) 29. Августа 2014 :: 07:09:
А что тут комментировать, т.к. надо группировку по составному реквизиту, то и формируем составной реквизит через Concat. Единственно - добавил некоторый "мусор" '%#' - чтобы гарантированно исключить варианты, когда "Товар" в строке 11 будет пересекаться с "Товар1" в строке 1.


вот я и просил подробнее про "мусор" Улыбка и кстпат  если соединять код, то можно просто написать "Товар.Код"?
  

хотел как лучше, а получилось как всегда Печаль
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: как составить запрос?
Ответ #6 - 29. Августа 2014 :: 10:28
Печать  
Писать можно то, что распознает SQL-сервер. Ну и обработчики вокруг запроса разные. Если используешь класс Прямой запрос, то можно Товар.Код, если же сам через ODBC или SQLite, то Товар.Code
  
Наверх
ICQ  
IP записан
 
pisarev
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Местоположение: Новосибирск
Зарегистрирован: 09. Августа 2013
Пол: Мужской
Re: как составить запрос?
Ответ #7 - 29. Августа 2014 :: 11:36
Печать  
Salimbek писал(а) 29. Августа 2014 :: 10:28:
Писать можно то, что распознает SQL-сервер. Ну и обработчики вокруг запроса разные. Если используешь класс Прямой запрос, то можно Товар.Код, если же сам через ODBC или SQLite, то Товар.Code


это понял, но какова роль %# ?
  

хотел как лучше, а получилось как всегда Печаль
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: как составить запрос?
Ответ #8 - 30. Августа 2014 :: 05:14
Печать  
Ну прими ее как систему распознавания "свой-чужой".
Я же писал выше, что это для отделения одного от другого.
Например будет у тебя товар с Кодом "11234" и строкой "1" и другой товар с Кодом "112" и строкой "341".

Если соединять их напрямую, то получится "112341" и в первом и во втором случае, но это же разные позиции.
Если же добавить какие-либо другие символы, то в первом случае получится строка:
"11234%#1", а во втором "112%#341". В результате эти строки гарантировано буду различаться.

А набор спецсимволов подбираешь любой, лишь бы была низкая вероятность встретить его в выборке. Например, если в Коде не могут встречаться буквы, то достаточно вставить любую буковку, например "а". В особо тяжелых случаях можно использовать и "#$%#my_secret##$@" или на что там фантазии хватит.
  
Наверх
ICQ  
IP записан
 
pisarev
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Местоположение: Новосибирск
Зарегистрирован: 09. Августа 2013
Пол: Мужской
Re: как составить запрос?
Ответ #9 - 01. Сентября 2014 :: 02:43
Печать  
теперь понял, спасибо!
  

хотел как лучше, а получилось как всегда Печаль
Наверх
IP записан
 
pisarev
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Местоположение: Новосибирск
Зарегистрирован: 09. Августа 2013
Пол: Мужской
Re: как составить запрос?
Ответ #10 - 01. Сентября 2014 :: 02:43
Печать  
ошибка такая:
"...CONCAT не является известным имя встроенной функции"
что это означает?

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
  

хотел как лучше, а получилось как всегда Печаль
Наверх
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: как составить запрос?
Ответ #11 - 01. Сентября 2014 :: 09:55
Печать  
Select
Товар + '%#' + cast(НомСтрДок as varchar(12))
  
Наверх
 
IP записан
 
pisarev
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Местоположение: Новосибирск
Зарегистрирован: 09. Августа 2013
Пол: Мужской
Re: как составить запрос?
Ответ #12 - 01. Сентября 2014 :: 10:20
Печать  
pavel_tr писал(а) 01. Сентября 2014 :: 09:55:
Select
Товар + '%#' + cast(НомСтрДок as varchar(12))


ясно, но почему не получается использовать CONCAT?
  

хотел как лучше, а получилось как всегда Печаль
Наверх
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: как составить запрос?
Ответ #13 - 01. Сентября 2014 :: 10:32
Печать  
Судя по манам метод добавлен в SQL 2012
  
Наверх
 
IP записан
 
pisarev
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Местоположение: Новосибирск
Зарегистрирован: 09. Августа 2013
Пол: Мужской
Re: как составить запрос?
Ответ #14 - 01. Сентября 2014 :: 11:15
Печать  
понятно, спасибо
  

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