Имя: Пароль:
1C
1C 7.7
v7: Подскажите по SQL запросу
0 МастерВопросов
 
19.08.11
08:41
Ругается на справочник Номенклатуры:

{Документ.ПеремещениеТМЦ.Форма.Модуль(2024)}: State 42000, native 8120, message [Microsoft][ODBC SQL Server Driver][SQL Server]Столбец "sc84.CODE" недопустим в списке выборки, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Текст запроса:
       ТекстЗапроса = "-- qryMaker:АналогиКонтрагентов.2009.11.03.14.01.32
       |SELECT  
       |   (lTrim(rTrim(CASE WHEN (ОстаткиТМЦОстатки.Фирма IN (SELECT val FROM #СписокФирм)) THEN 'Наше_' ELSE 'НеНаше_' END))+lTrim(rTrim(Номенклатура.Code))) as Индекс
       |   , ОстаткиТМЦОстатки.Фирма AS [Фирма $Справочник.Фирмы]  
       |   , ОстаткиТМЦОстатки.Номенклатура [Номенклатура $Справочник.Номенклатура]
       |    , Sum(ОстаткиТМЦОстатки.КоличествоОстаток) КолОст
       |FROM $РегистрОстатки.ОстаткиТМЦ(:ВыбДата,,
       |        (Склад = :ВыбСклад) AND (Номенклатура IN (SELECT val FROM #СписокНоменклатуры)),
       |        (Фирма,Номенклатура),) AS ОстаткиТМЦОстатки
       |     INNER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON ОстаткиТМЦОстатки.Номенклатура = Номенклатура.ID
       |GROUP BY
       |  (lTrim(rTrim(CASE WHEN (ОстаткиТМЦОстатки.Фирма IN (SELECT val FROM #СписокФирм)) THEN 'Наше_' ELSE 'НеНаше_' END))+lTrim(rTrim(Номенклатура.Code)))
       |, ОстаткиТМЦОстатки.Фирма
       |, ОстаткиТМЦОстатки.Номенклатура
       |Having Sum(ОстаткиТМЦОстатки.КоличествоОстаток)>0
       |Order By ОстаткиТМЦОстатки.Номенклатура
       |";

А в таком варианте работает без ошибок:

       ТекстЗапроса = "-- qryMaker:АналогиКонтрагентов.2009.11.03.14.01.32
       |SELECT  
       |   (lTrim(rTrim('Наше_'))+lTrim(rTrim(Номенклатура.Code))) as Индекс
       ....
       |GROUP BY
       |  (lTrim(rTrim('Наше_'))+lTrim(rTrim(Номенклатура.Code)))
       ....
       |";
1 YHVVH
 
19.08.11
08:44
попробуй через вложенный запрос
2 Ёпрст
 
19.08.11
08:48
А так ?
Select
lTrim(rTrim(CASE WHEN ОстаткиТМЦОстатки.Фирма IN (SELECT val FROM #СписокФирм) THEN 'Наше_' ELSE 'НеНаше_' END)))+lTrim(rTrim(Номенклатура.Code)) as Индекс

...
Group by
lTrim(rTrim(CASE WHEN ОстаткиТМЦОстатки.Фирма IN (SELECT val FROM #СписокФирм) THEN 'Наше_' ELSE 'НеНаше_' END)))+lTrim(rTrim(Номенклатура.Code))
3 Nutsiiam
 
19.08.11
08:50
оборачивай получение группировочного поля в подзапрос.
4 МастерВопросов
 
19.08.11
09:14
(2) неа, таже ошибка
5 Ёпрст
 
19.08.11
09:24
(4) ну тогда, только оборачиванием всего в подзапрос пробуй.
6 Ёпрст
 
19.08.11
09:25
да..еще попробуй другой алияс задать для справочника Номенклатура, сперва.
7 МастерВопросов
 
19.08.11
09:28
так заработало:

       ТекстЗапроса = "-- qryMaker:АналогиКонтрагентов.2009.11.03.14.01.32
       |SELECT  
       |   (lTrim(rTrim(CASE WHEN (ОстаткиТМЦОстатки.Фирма IN (SELECT val FROM #СписокФирм)) THEN 'Наше_' ELSE 'НеНаше_' END)))+lTrim(rTrim(Номенклатура.Code)) as Индекс
            ...
       |GROUP BY
       |  Номенклатура.Code



Но чо то ссыкотно оставлять, вдруг каким боком вылезет в дальнейшем. Буду переделывать на подзапрос.
8 Ёпрст
 
19.08.11
09:31
(7) а зачем тебе вообще код номенклатуры упёрся ?
Конда есть и так уникальный id у номенклатуры .. и твоё соединение со справочником нафик не упёрлось вообще.
9 МастерВопросов
 
19.08.11
09:35
(8) а как я потом за пределами запроса в таблице буду искать номенклатуру по ID?

А так просто ТекстДляпоиска="НеНаше_"+СoкрЛП(Выбноменклтаруа.Код)
10 Ёпрст
 
19.08.11
10:05
(9) как 2 пальца..по id.

А так, привязываться к коду, который могут изменить, который может быть не уникальным - моветон.
11 antoneus
 
19.08.11
10:06
(9) через MetaDataWork хотя бы
12 Ёпрст
 
19.08.11
10:07
ЗначениеВСтрокуБД, если что..
13 МастерВопросов
 
19.08.11
11:44
(11)(12)
спасибо
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn