К списку форумов К списку вопросов
ОФФ: Попробую еще раз. Прямой запрос к 1С в SQL
Daisy
24.06.2004 - 17:32
Пытаюсь написать запрос в SQL по выводу остатков на 5 марта по складу с кодом 060123. Проблема вот в чем: при объединении таблиц не сворачивает строки, то есть вывод типа Товар1 10, Товар1 -5. Есть знающие люди? где моя ошибка??? Заранее спасибо
текст запроса
SELECT SC31.DESCR,SC33.CODE,SC33.DESCR,
CONVERT( CHAR( 20 ) , Sum( RG99.SP102 ) )
FROM RG99, SC31, SC33
WHERE ( RG99.SP101 = SC33.ID ) AND
( RG99.SP100 = SC31.ID ) AND
( CONVERT ( DATETIME , RG99.PERIOD ) =
 CONVERT ( DATETIME , '02.01.2004' ) ) AND
( RTRIM( LTRIM ( SC31.CODE )) Like '060123' )
GROUP BY SC31.DESCR,SC33.CODE, SC33.DESCR
            
UNION ALL
            
SELECT SC31.DESCR,SC33.CODE, SC33.DESCR,
CONVERT( CHAR( 20 ) , Sum( RA99.SP102 * ( 1 - 2 * RA99.DEBKRED ) ) )
FROM RA99, SC31, SC33, _1SJOURN
WHERE ( RA99.SP101 = SC33.ID ) AND
( RA99.SP100 = SC31.ID ) AND
( RA99.IDDOC = _1SJOURN.IDDOC ) AND
( CONVERT ( DATETIME , LEFT(_1SJOURN.DATE_TIME_IDDOC , 8 )) >=
 CONVERT ( DATETIME , '03.01.2004') ) AND
( CONVERT ( DATETIME , LEFT(_1SJOURN.DATE_TIME_IDDOC , 8 )) <=
CONVERT ( DATETIME , '03.05.2004') ) AND
 ( RTRIM( LTRIM ( SC31.CODE )) Like '060123' )
GROUP BY SC31.DESCR ,SC33.CODE, SC33.DESCR
ORDER BY SC31.DESCR, SC33.DESCR
Shannon
1 - 24.06.2004 - 17:36
Что-то с группировкой, нет?
Попробуй заменить в обоих подзапросах вместо
GROUP BY SC31.DESCR, SC33.CODE, SC33.DESCR
на
GROUP BY SC31.DESCR, SC33.DESCR
Gloom
2 - 24.06.2004 - 17:38
агрегирование надо к юниону целиком применить
Daisy
3 - 24.06.2004 - 17:38
Пишет ошибку:((
Server: Msg 8120, Level 16, State 1, Line 1
Column 'SC33.CODE' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Shannon
4 - 24.06.2004 - 17:41
3: Сорри... Чёрт, и в самом деле - (2).
Daisy
5 - 24.06.2004 - 17:41
(2)Извините, я новичок в этом деле. Можно сказать это мой первый запрос. Агрегирование, это в смысле GROUP BY?
Sadovnikov
6 - 24.06.2004 - 17:43
(0) Загляни сюда:
http://www.perlscript.ru/v77_25.shtml#news
Daisy
7 - 24.06.2004 - 17:49
спасибо за ссылку, я туда уже раньше заглядывала. Но знаете такое бывает, там все понятно, а что у меня не так не понимаю.
Windrose
8 - 24.06.2004 - 17:51
используй свой запрос как подзапрос а ао нему по полям делай сумм
Antonio
9 - 24.06.2004 - 17:55
(0) зачем вот это:
CONVERT( CHAR( 20 ) , Sum( RG99.SP102 ) )
CONVERT( CHAR( 20 ) , Sum( RA99.SP102 * ( 1 - 2 * RA99.DEBKRED ) ) )
зачем преобразуешь к char(20)?
Daisy
10 - 24.06.2004 - 18:00
это я переделывала из другого запроса (в инете) нашла. Не знаю зачем там это. Но если убрать ничего не меняется.
Daisy
11 - 24.06.2004 - 18:02
(8) а можно поподробней...?
а то ставлю скобки в начале в конце пишу в начале
SELECT SC31.DESCR,SC33.CODE,SC33.DESCR, Что здесь написать?:
FROM
Vaicartana
12 - 24.06.2004 - 18:04
вместо изобретения велосипеда лучше бы 1С++ начали изучать, где подобные запросы мета-парсером на ура проходят
Daisy
13 - 24.06.2004 - 18:07
(12) 1С++ уже скачала, но мне кажется для начала надо основы понять с нуля.
Daisy
14 - 24.06.2004 - 18:11
А может кто-нибудь напишет как сделать? я была бы очень благодарна
Daisy
15 - 24.06.2004 - 18:13
Все равно всем спасибо! по крайней мере новые идеи, а то я уже иссякла
Antonio
16 - 24.06.2004 - 18:20
(11)
select t.DESCR,t.CODE,t.DESCR1,
sum(t.s)
from (
SELECT SC31.DESCR,SC33.CODE,SC33.DESCR descr1,
RG99.SP102 s
FROM RG99, SC31, SC33
WHERE ( RG99.SP101 = SC33.ID ) AND
( RG99.SP100 = SC31.ID ) AND
( CONVERT ( DATETIME , RG99.PERIOD ) =
 CONVERT ( DATETIME , '02.01.2004' ) ) AND
( RTRIM( LTRIM ( SC31.CODE )) Like '060123' )
GROUP BY SC31.DESCR,SC33.CODE, SC33.DESCR
            
UNION ALL
SELECT SC31.DESCR,SC33.CODE, SC33.DESCR descr1,
RA99.SP102 * ( 1 - 2 * RA99.DEBKRED ) s
FROM RA99, SC31, SC33, _1SJOURN
WHERE ( RA99.SP101 = SC33.ID ) AND
( RA99.SP100 = SC31.ID ) AND
( RA99.IDDOC = _1SJOURN.IDDOC ) AND
( CONVERT ( DATETIME , LEFT(_1SJOURN.DATE_TIME_IDDOC , 8 )) >=
 CONVERT ( DATETIME , '03.01.2004') ) AND
( CONVERT ( DATETIME , LEFT(_1SJOURN.DATE_TIME_IDDOC , 8 )) <=
CONVERT ( DATETIME , '03.05.2004') ) AND
 ( RTRIM( LTRIM ( SC31.CODE )) Like '060123' )
) t
group by t.DESCR,t.CODE,t.DESCR1
order by t.DESCR,t.CODE,t.DESCR1
Windrose
17 - 24.06.2004 - 18:20
Мне просто лень княпать стоко ну типа
Select tbl.Name,tbl.Code, sum(tbl.ost)
from
(SELECT SC31.DESCR,SC33.CODE,SC33.DESCR,
CONVERT( CHAR( 20 ) , Sum( RG99.SP102 ) )
FROM RG99, SC31, SC33
WHERE ( RG99.SP101 = SC33.ID ) AND
( RG99.SP100 = SC31.ID ) AND
( CONVERT ( DATETIME , RG99.PERIOD ) =
 CONVERT ( DATETIME , '02.01.2004' ) ) AND
( RTRIM( LTRIM ( SC31.CODE )) Like '060123' )
GROUP BY SC31.DESCR,SC33.CODE, SC33.DESCR
            
UNION ALL
            
SELECT SC31.DESCR,SC33.CODE, SC33.DESCR,
CONVERT( CHAR( 20 ) , Sum( RA99.SP102 * ( 1 - 2 * RA99.DEBKRED ) ) )
FROM RA99, SC31, SC33, _1SJOURN
WHERE ( RA99.SP101 = SC33.ID ) AND
( RA99.SP100 = SC31.ID ) AND
( RA99.IDDOC = _1SJOURN.IDDOC ) AND
( CONVERT ( DATETIME , LEFT(_1SJOURN.DATE_TIME_IDDOC , 8 )) >=
 CONVERT ( DATETIME , '03.01.2004') ) AND
( CONVERT ( DATETIME , LEFT(_1SJOURN.DATE_TIME_IDDOC , 8 )) <=
CONVERT ( DATETIME , '03.05.2004') ) AND
 ( RTRIM( LTRIM ( SC31.CODE )) Like '060123' )
GROUP BY SC31.DESCR ,SC33.CODE, SC33.DESCR
ORDER BY SC31.DESCR, SC33.DESCR )ost
group by ost.name ost.code
order by ost.name
Antonio
18 - 24.06.2004 - 18:22
+(16) GROUP BY SC31.DESCR,SC33.CODE, SC33.DESCR
надо убрать
Windrose
19 - 24.06.2004 - 18:22
Ой замени в начале tbl на ost
Antonio
20 - 24.06.2004 - 18:24
(17) не взлетит :)
Vaicartana
21 - 24.06.2004 - 18:28
2 (13)
перед мета-запросом напиши
Бд.Оладка(1);
Бд.Открыть(ТекстЗапроса);
,где Бд - объект ODBCRecordSet
.
он тебе весь запрос и вывалит в лог.
.
Вместо ф-ии CONVERT лучше использовать стандарт даты для ОДБС драйвера
{d '01-12-2003'}
Windrose
22 - 24.06.2004 - 18:28
конечно не взлетит! я даю удочку а не рыбу
Windrose
23 - 24.06.2004 - 18:32
Кстати слазь на www.1csql.ru там есть вааще просто как делать через тойскл
toypaul
24 - 24.06.2004 - 18:55
(22) тебя могут забанить за такую активную рекламу :). предупреждаю ;)...
Daisy
25 - 25.06.2004 - 11:05
Супер!!! все получилось!!! Спасибо огромное!!! Расцеловать вас всех что-ли:)
Кстати, еще один вопрос по ходу. Так в чем лучше учится работать: 1С++, ToySQL, Rainbow, TSQL? а то что-то совсем запуталась. Если не лень поделитесь мнением.
МуМу
26 - 25.06.2004 - 11:10
Transact SQL круче всего!
Daisy
27 - 25.06.2004 - 11:11
(26) можно уточнить почему?

К списку вопросов на форуме 1C

>>