|
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) ну я и грю, получать его опосля юниона..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |