Имя: Пароль:
1C
1C 7.7
v7: Incorrect syntax near the keyword 'ORDER'.
,
0 Lacoster
 
20.06.13
08:56
Туплю. Есть 2 запроса. Каждый в отдельности отрабатывает без ошибок. Но когда я делаю Union All вылезает ошибка Incorrect syntax near the keyword 'ORDER'.
ТекстЗапросаГруппы="
       |SELECT
       |$НаценочнаяТаблица.ГруппаТовара [ГруппаТовара $Справочник]
       |    , $НаценочнаяТаблица.УчБуквы НеУчБуквы
       |    , $ПоследнееЗначение.НаценочнаяТаблица.Коэффициент(НаценочнаяТаблица.ID, :ВыбДата) Коэффициент
       |    , НаценочнаяТаблица.Code Код
       |    , НаценочнаяТаблица.ID [Ссылка $Справочник.НаценочнаяТаблица]
       |    , $НаценочнаяТаблица.ИзПрайса [ИзПрайс $Справочник]
       |FROM $Справочник.НаценочнаяТаблица AS НаценочнаяТаблица With (NOLOCK)
       |left outer join $Справочник.НаценочнаяТаблица Лайк on НаценочнаяТаблица.PARENTID = Лайк.ID
       |                                                        AND НаценочнаяТаблица.IsMark = 0
       |WHERE
       |$НаценочнаяТаблица.ГруппаТовара=:ВыбГрТовара~
       |AND Лайк.Code like '%Опт%'
       |ORDER BY
       |$НаценочнаяТаблица.ГруппаТовара
       |";
       

   
       
       ТекстЗапросаБуквы="
       |SELECT
       |$НаценочнаяТаблица.ГруппаТовара [ГруппаТовара $Справочник]
       |    , $НаценочнаяТаблица.УчБуквы НеУчБуквы
       |    , $ПоследнееЗначение.НаценочнаяТаблица.Коэффициент(НаценочнаяТаблица.ID, :ВыбДата) Коэффициент
       |    , НаценочнаяТаблица.Code Код
       |    , НаценочнаяТаблица.ID [Ссылка $Справочник.НаценочнаяТаблица]
       |    , $НаценочнаяТаблица.ИзПрайса [ИзПрайс $Справочник]
       |FROM $Справочник.НаценочнаяТаблица AS НаценочнаяТаблица With (NOLOCK)
       |left outer join $Справочник.НаценочнаяТаблица Лайк on НаценочнаяТаблица.PARENTID = Лайк.ID
       |                                                        AND НаценочнаяТаблица.IsMark = 0
       |WHERE
       |$НаценочнаяТаблица.ГруппаТовара=:РасчГруппа~
       |AND Лайк.Code like '%Опт%'
       |ORDER BY
       |$НаценочнаяТаблица.ГруппаТовара
       |";


текстзапроса="("+ТекстЗапросаГруппы+") UNION ALL (
           |"+ТекстЗапросаБуквы +")";

Ну что я делаю не так?
1 Ёпрст
 
20.06.13
08:57
дык выкини упорядочивание..
2 Ёпрст
 
20.06.13
08:57
Если оно нужно тебе - оберни юнионы в подзапрос, снаружи упорядочи как угодно
3 Lacoster
 
20.06.13
08:58
Выкинул. теперь это
ORDER BY items must appear in the select list if the statement contains a UNION operator.
4 Ёпрст
 
20.06.13
08:58
+ убери типизацию во втором юнионе.
5 Ёпрст
 
20.06.13
08:59
(3)
dsrbyb crj,rb vt;le .ybjyfv
6 Lacoster
 
20.06.13
08:59
Упорядочевание мне вообще не нужно. он ругается что с Юнионом надо упорядочить, ну я и упорядочил
7 Ёпрст
 
20.06.13
08:59
выкини скобки между юнионами
8 Lacoster
 
20.06.13
09:01
текстзапроса=ТекстЗапросаГруппы+"UNION ALL"+ТекстЗапросаБуквы;
Всё равно ошибка
ORDER BY items must appear in the select list if the statement contains a UNION operator.
9 Ёпрст
 
20.06.13
09:03
пилять, да выкинь ты ордер бай с обоих запросов.
10 Lacoster
 
20.06.13
09:05
выкинул
|SELECT
       |$НаценочнаяТаблица.ГруппаТовара [ГруппаТовара $Справочник]
       |    , $НаценочнаяТаблица.УчБуквы НеУчБуквы
       |    , $ПоследнееЗначение.НаценочнаяТаблица.Коэффициент(НаценочнаяТаблица.ID, :ВыбДата) Коэффициент
       |    , НаценочнаяТаблица.Code Код
       |    , НаценочнаяТаблица.ID [Ссылка $Справочник.НаценочнаяТаблица]
       |    , $НаценочнаяТаблица.ИзПрайса [ИзПрайс $Справочник]
       |FROM $Справочник.НаценочнаяТаблица AS НаценочнаяТаблица With (NOLOCK)
       |left outer join $Справочник.НаценочнаяТаблица Лайк on НаценочнаяТаблица.PARENTID = Лайк.ID
       |                                                        AND НаценочнаяТаблица.IsMark = 0
       |WHERE
       |$НаценочнаяТаблица.ГруппаТовара=:РасчГруппа~
       |AND Лайк.Code like '%Опт%'
11 Ёпрст
 
20.06.13
09:10
(10) и ?
12 Ёпрст
 
20.06.13
09:11
(10) + своим WHERE  ты left join сделал как inner join, оно так тебе и надо ?
13 Ёпрст
 
20.06.13
09:11
а чорт, в (12) спутал..
14 Ёпрст
 
20.06.13
09:12
у тебя псевдоним Лайк..
15 Lacoster
 
20.06.13
09:13
такая же ошибка, ничего не поменялось.
ORDER BY items must appear in the select list if the statement contains a UNION operator.
16 Mikeware
 
20.06.13
09:13
(4) почему только во втором?
в обоих. и обернуть в подзапрос.
17 Lacoster
 
20.06.13
09:13
Да во всех убрал
18 varelchik
 
20.06.13
09:14
(0) Тебе же четко сказали.
УБЕРИ ТИПИЗАЦИЮ.
А делай ее уже в конце.
19 Lacoster
 
20.06.13
09:14
в подзапрос оборачивать не хочу. У меня у номенклатуры бывают поля не все заполнены. И я буду проверять если заполнено поле, то + Юнион
20 Lacoster
 
20.06.13
09:15
(18) Типизацию чего?
21 varelchik
 
20.06.13
09:16
простой пример:
select
t.МоеПоле [Поле $Справочник]
from
(
select
s.id id
from $Справочник.МойСправочник s
uninon all
select
s1.id id
from $Справочник.МойСправочник1 s1
) t
22 varelchik
 
20.06.13
09:17
Этого
$НаценочнаяТаблица.ГруппаТовара [ГруппаТовара $Справочник]
23 varelchik
 
20.06.13
09:19
+
а в union-ах делай алисы разными.
НаценочнаяТаблица
НаценочнаяТаблица1
НаценочнаяТаблица2
и тд.
24 SnarkHunter
 
20.06.13
09:19
Думаешь, понял?
25 varelchik
 
20.06.13
09:20
все union-ы собтрай в один запрос.
и вот его-то и типизируй.
26 varelchik
 
20.06.13
09:20
(24) Это ты кому? Мне что-ли?
27 Lacoster
 
20.06.13
09:20
не помогло. Буквально неделю назад писал подобное и все работало. Вот пример
ТекстЗапросаИНорм="
       |SELECT ИзменениеНорм.IDDOC [Ссылка $Документ.ИзменениеНорм]
       |,Журнал.IDDOCDEF [Документ_вид $ВидДокумента]
       |    , Пользователи.ID [Автор $Справочник.Пользователи]
       |,Max(ДокС.LINENO_) as КолС
       |,1 ДокС
       |FROM $Документ.ИзменениеНорм AS ИзменениеНорм With (NOLOCK)
       |    INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ИзменениеНорм.IDDOC = Журнал.IDDOC
       |    inner join $Справочник.Пользователи Пользователи on Пользователи.descr=$ИзменениеНорм.Согласовал
       |inner join $ДокументСтроки.ИзменениеНорм ДокС on ДокС.IDDoc=ИзменениеНорм.IDDOC
       |WHERE (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~ )
       |    AND ((Журнал.CLOSED & 1) = 1)
       
       //|    AND (Журнал.$ОбщийРеквизит.Автор IN (SELECT val FROM #СпМен))
       |GROUP BY ИзменениеНорм.IDDOC
       |    , Пользователи.ID
       |, Журнал.IDDOCDEF
       |";            
       
       ТекстЗапросаПерем01="
       |SELECT ПеремещениеТМЦ01.IDDOC [Ссылка $Документ.ПеремещениеТМЦ01]
       |,Журнал.IDDOCDEF [Документ_вид $ВидДокумента]
       |    , Журнал.$ОбщийРеквизит.Автор [Автор $Справочник.Пользователи]
       |,Max(ДокС.LINENO_) as КолС
       |,1 ДокС
       |FROM $Документ.ПеремещениеТМЦ01 AS ПеремещениеТМЦ01 With (NOLOCK)
       |    INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON (ПеремещениеТМЦ01.IDDOC = Журнал.IDDOC)
       |                                                AND (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~ )
       |                                                AND ((Журнал.CLOSED & 1) = 1)
       |INNER join $Справочник.Склады Склады on Склады.ID = $ПеремещениеТМЦ01.Склад
       |                                    AND ((Склады.descr like '01%')
       |                                    OR (Склады.descr like '03%'))
       |inner join $ДокументСтроки.ПеремещениеТМЦ01 ДокС on ДокС.IDDoc=ПеремещениеТМЦ01.IDDOC
       //|    AND (Журнал.$ОбщийРеквизит.Автор IN (SELECT val FROM #СпМен))
       |GROUP BY ПеремещениеТМЦ01.IDDOC
       |    , Журнал.$ОбщийРеквизит.Автор
       |, Журнал.IDDOCDEF
       |";    

Тут всё объединяется и работает
28 Ёпрст
 
20.06.13
09:24
(27) покажи весь текст запроса целиком
29 Lacoster
 
20.06.13
09:26
Я не объединял ещё в подзапрос. Я пытаюсь понять почему в таком же примере неделю назад Юнион работал, а сейчас не работает
30 Ёпрст
 
20.06.13
09:27
(29) ты не выкинул order by из запроса, вот и не работает
31 Lacoster
 
20.06.13
09:28
Угараешь? Сам же сказал выкинуть
32 Lacoster
 
20.06.13
09:28
сейчас у меня такой вид
ТекстЗапросаГруппы="
       |SELECT
       |$НаценочнаяТаблица.ГруппаТовара [ГруппаТовара $Справочник]
       |    , $НаценочнаяТаблица.УчБуквы НеУчБуквы
       |    , $ПоследнееЗначение.НаценочнаяТаблица.Коэффициент(НаценочнаяТаблица.ID, :ВыбДата) Коэффициент
       |    , НаценочнаяТаблица.Code Код
       |    , НаценочнаяТаблица.ID [Ссылка $Справочник.НаценочнаяТаблица]
       |    , $НаценочнаяТаблица.ИзПрайса [ИзПрайс $Справочник]
       |FROM $Справочник.НаценочнаяТаблица AS НаценочнаяТаблица With (NOLOCK)
       |inner join $Справочник.НаценочнаяТаблица Лайк on НаценочнаяТаблица.PARENTID = Лайк.ID
       |                                                        AND НаценочнаяТаблица.IsMark = 0
       |                                                        and $НаценочнаяТаблица.ГруппаТовара=:ВыбГрТовара~
       |                                                        AND Лайк.Code like '%Опт%'
       |";
       

   
       
       ТекстЗапросаБуквы="
       |SELECT
       |$НаценочнаяТаблица.ГруппаТовара [ГруппаТовара $Справочник]
       |    , $НаценочнаяТаблица.УчБуквы НеУчБуквы
       |    , $ПоследнееЗначение.НаценочнаяТаблица.Коэффициент(НаценочнаяТаблица.ID, :ВыбДата) Коэффициент
       |    , НаценочнаяТаблица.Code Код
       |    , НаценочнаяТаблица.ID [Ссылка $Справочник.НаценочнаяТаблица]
       |    , $НаценочнаяТаблица.ИзПрайса [ИзПрайс $Справочник]
       |FROM $Справочник.НаценочнаяТаблица AS НаценочнаяТаблица With (NOLOCK)
       |left outer join $Справочник.НаценочнаяТаблица Лайк on НаценочнаяТаблица.PARENTID = Лайк.ID
       |                                                        AND НаценочнаяТаблица.IsMark = 0
       |                                                        and $НаценочнаяТаблица.ГруппаТовара=:ВыбГрТовара~
       |                                                        AND Лайк.Code like '%Опт%'
       |";
       
       
           текстзапроса=ТекстЗапросаГруппы+"UNION ALL"+ТекстЗапросаБуквы;
33 Ёпрст
 
20.06.13
09:31
(32)
текстзапроса=ТекстЗапросаГруппы+" UNION ALL "+ТекстЗапросаБуквы;

наслаждайся
34 Lacoster
 
20.06.13
09:32
Думал пробелы помогут? Не помогло, такая же ошибка
35 Ёпрст
 
20.06.13
09:32
ну и , во втором запросе надо бы все алиясы сделать отличными от первого запроса, метапарсер 1cpp этого не переваривает
36 Ёпрст
 
20.06.13
09:33
ТекстЗапросаБуквы="
       |SELECT
       |$НаценочнаяТаблица2.ГруппаТовара [ГруппаТовара $Справочник]
       |    , $НаценочнаяТаблица2.УчБуквы НеУчБуквы
       |    , $ПоследнееЗначение.НаценочнаяТаблица.Коэффициент(НаценочнаяТаблица2.ID, :ВыбДата) Коэффициент
       |    , НаценочнаяТаблица2.Code Код
       |    , НаценочнаяТаблица2.ID [Ссылка $Справочник.НаценочнаяТаблица]
       |    , $НаценочнаяТаблица2.ИзПрайса [ИзПрайс $Справочник]
       |FROM $Справочник.НаценочнаяТаблица AS НаценочнаяТаблица2 With (NOLOCK)
       |left outer join $Справочник.НаценочнаяТаблица Лайк2 on НаценочнаяТаблица2.PARENTID = Лайк2.ID
       |                                                        AND НаценочнаяТаблица2.IsMark = 0
       |                                                        and $НаценочнаяТаблица2.ГруппаТовара=:ВыбГрТовара~
       |                                                        AND Лайк2.Code like '%Опт%'
       |";
37 Lacoster
 
20.06.13
09:33
Ёбта! Щас пробну
38 Ёпрст
 
20.06.13
09:34
ну и выкинуть типизацию чо второго запрса..
39 Lacoster
 
20.06.13
09:36
Второй запрос получил вот такйо вид
ТекстЗапросаБуквы="
       |SELECT
       |$НаценочнаяТаблица1.ГруппаТовара
       |    , $НаценочнаяТаблица1.УчБуквы НеУчБуквы
       |    , $ПоследнееЗначение.НаценочнаяТаблица.Коэффициент(НаценочнаяТаблица1.ID, :ВыбДата) Коэффициент
       |    , НаценочнаяТаблица1.Code Код
       |    , НаценочнаяТаблица1.ID
       |    , $НаценочнаяТаблица1.ИзПрайса
       |FROM $Справочник.НаценочнаяТаблица AS НаценочнаяТаблица1 With (NOLOCK)
       |inner join $Справочник.НаценочнаяТаблица Лайк1 on НаценочнаяТаблица1.PARENTID = Лайк1.ID
       |                                                        AND НаценочнаяТаблица1.IsMark = 0
       |                                                        and $НаценочнаяТаблица1.ГруппаТовара=:ВыбГрТовара~
       |                                                        AND Лайк1.Code like '%Опт%'
       |";
Не работает
40 Ёпрст
 
20.06.13
09:37
(39) ошибка какая ?
41 Ёпрст
 
20.06.13
09:37
дай текст и з
запрос.Отладка(1)
42 Lacoster
 
20.06.13
09:38
ит = рс.ВыполнитьИнструкцию(ТекстЗапроса);
{C:\DOCUMENTS AND SETTINGS\ИПОПОВ\РАБОЧИЙ СТОЛ\ТЕСТ.ERT(98)}: State 42000, native 104, message [Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator.

ТекстЗапросаГруппы="
       |SELECT
       |$НаценочнаяТаблица.ГруппаТовара [ГруппаТовара $Справочник]
       |    , $НаценочнаяТаблица.УчБуквы НеУчБуквы
       |    , $ПоследнееЗначение.НаценочнаяТаблица.Коэффициент(НаценочнаяТаблица.ID, :ВыбДата) Коэффициент
       |    , НаценочнаяТаблица.Code Код
       |    , НаценочнаяТаблица.ID [Ссылка $Справочник.НаценочнаяТаблица]
       |    , $НаценочнаяТаблица.ИзПрайса [ИзПрайс $Справочник]
       |FROM $Справочник.НаценочнаяТаблица AS НаценочнаяТаблица With (NOLOCK)
       |inner join $Справочник.НаценочнаяТаблица Лайк on НаценочнаяТаблица.PARENTID = Лайк.ID
       |                                                        AND НаценочнаяТаблица.IsMark = 0
       |                                                        and $НаценочнаяТаблица.ГруппаТовара=:ВыбГрТовара~
       |                                                        AND Лайк.Code like '%Опт%'
       |";
       

   
       
       ТекстЗапросаБуквы="
       |SELECT
       |$НаценочнаяТаблица1.ГруппаТовара
       |    , $НаценочнаяТаблица1.УчБуквы НеУчБуквы
       |    , $ПоследнееЗначение.НаценочнаяТаблица.Коэффициент(НаценочнаяТаблица1.ID, :ВыбДата) Коэффициент
       |    , НаценочнаяТаблица1.Code Код
       |    , НаценочнаяТаблица1.ID
       |    , $НаценочнаяТаблица1.ИзПрайса
       |FROM $Справочник.НаценочнаяТаблица AS НаценочнаяТаблица1 With (NOLOCK)
       |inner join $Справочник.НаценочнаяТаблица Лайк1 on НаценочнаяТаблица1.PARENTID = Лайк1.ID
       |                                                        AND НаценочнаяТаблица1.IsMark = 0
       |                                                        and $НаценочнаяТаблица1.ГруппаТовара=:ВыбГрТовара~
       |                                                        AND Лайк1.Code like '%Опт%'
       |";
       
       
           текстзапроса=ТекстЗапросаГруппы+" UNION ALL "+ТекстЗапросаБуквы;
43 Mikeware
 
20.06.13
09:41
(42) издеваешься?
44 Lacoster
 
20.06.13
09:41
SELECT
НаценочнаяТаблица.sp11736 [ГруппаТовара $Справочник]
   , НаценочнаяТаблица.sp11748 НеУчБуквы
   , (
select top 1
cast(c11714_vv.value as numeric(9, 2))
from
_1sconst as c11714_vv (nolock)
where
c11714_vv.id = 11714 and
c11714_vv.objid = НаценочнаяТаблица.ID and
(c11714_vv.date <= '20130620')
order by c11714_vv.date desc, c11714_vv.time desc, c11714_vv.docid desc, c11714_vv.row_id desc
) Коэффициент
   , НаценочнаяТаблица.Code Код
   , НаценочнаяТаблица.ID [Ссылка $Справочник.НаценочнаяТаблица]
   , НаценочнаяТаблица.sp11741 [ИзПрайс $Справочник]
FROM sc11711 AS НаценочнаяТаблица With (NOLOCK)
inner join sc11711 Лайк on НаценочнаяТаблица.PARENTID = Лайк.ID
                                                       AND НаценочнаяТаблица.IsMark = 0
                                                       and НаценочнаяТаблица.sp11736=' 8FA     X001'
                                                       AND Лайк.Code like '%Опт%'
UNION ALL
SELECT
НаценочнаяТаблица1.sp11736
   , НаценочнаяТаблица1.sp11748 НеУчБуквы
   , (
select top 1
cast(c11714_vv.value as numeric(9, 2))
from
_1sconst as c11714_vv (nolock)
where
c11714_vv.id = 11714 and
c11714_vv.objid = НаценочнаяТаблица1.ID and
(c11714_vv.date <= '20130620')
order by c11714_vv.date desc, c11714_vv.time desc, c11714_vv.docid desc, c11714_vv.row_id desc
) Коэффициент
   , НаценочнаяТаблица1.Code Код
   , НаценочнаяТаблица1.ID
   , НаценочнаяТаблица1.sp11741
FROM sc11711 AS НаценочнаяТаблица1 With (NOLOCK)
inner join sc11711 Лайк1 on НаценочнаяТаблица1.PARENTID = Лайк1.ID
                                                       AND НаценочнаяТаблица1.IsMark = 0
                                                       and НаценочнаяТаблица1.sp11736=' 8FA     X001'
                                                       AND Лайк1.Code like '%Опт%'

ит = рс.ВыполнитьИнструкцию(ТекстЗапроса);
{C:\DOCUMENTS AND SETTINGS\ИПОПОВ\РАБОЧИЙ СТОЛ\ТЕСТ.ERT(99)}: State 42000, native 104, message [Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator.
45 SnarkHunter
 
20.06.13
09:43
Ха-ха-ха...
46 Lacoster
 
20.06.13
09:45
(45) ?
47 Ёпрст
 
20.06.13
09:50
(46) тебе придётся последенее значение не использовать, а через max ручонками выбрать значение периодики, или, получить его на выходе после юниона
48 Lacoster
 
20.06.13
09:52
(47) Это какое последнее значение? У меня таблицы получаются из 1 строки. Мб не париться и воспользоваться функцией Заполнить?
49 Ёпрст
 
20.06.13
09:53
(48)
, $ПоследнееЗначение.НаценочнаяТаблица.Коэффициент(НаценочнаяТаблица1.ID, :ВыбДата) Коэффициент
50 Lacoster
 
20.06.13
09:59
чёт не догнал. Ладно, я каждый запрос отработаю отдельно и потом ТЗ-хи объединю
51 Lacoster
 
20.06.13
10:00
Да и кстати, закоментив Последнее значение у меня отработал без ошибок, но я получил таблицу из 2-х строк (вроде как положено), только из одинаковых строк
52 Rie
 
20.06.13
10:00
(50) Тогда уж временные таблицы лучше использовать, IMHO.
53 Lacoster
 
20.06.13
10:02
(52) да ему будет не тяжело склеить 4 таблички состоящие из 1 строчки. И то иногда будет не 4 таблички, а 2, т.к. не все реквизиты у номенклатуры заполнены
54 ADirks
 
20.06.13
11:30
(47) не, ну почему - если запихнёт все в подзапрос, то и ПоследнееЗначение можно будет.
Я вот ни разу не понимаю, чё все так подзапросов боятся? Оптимизатору ваще пофиг, хоть сто уровней наверни. И, главное, позапросов боятся, а временных таблиц и запросов в N этапов - не боятся. Загадка?
55 Ёпрст
 
20.06.13
11:35
(54) ну я и грю, получать его опосля юниона..
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс