Имя: Пароль:
1C
1C 7.7
v7: Помогите с SQL запросом к MDB
0 geniusbsd
 
22.03.16
08:44
Добрый день
В MDB есть две таблиц CheckSod и CheckHead связанные по полям ID
Из таблицы CheckSod требуется получить Все товары за период где в поле SALE указанна ВидАкции
В моем запросе как то странно учитывается период посмотрите плиз свежим взглядом где я намудрил?

ПДат=Лев(Дат1,8);
Пдат2=Лев(Дат2,8);
Акция=СокрЛП(ВидАкции);
SQLText="select CheckSod.[KodTov], sum(CheckSod.[Cena]) As Cena, sum(CheckSod.[Kvo]) As Kvo ";
        SQLText=SQLText+"from CheckSod inner join CheckHead on CheckSod.IdCheck=CheckHead.Id ";
SQLText=SQLText+"where (CheckSod.dat>="""+ПДат+""")  AND (CheckSod.dat<="""+ПДат2+""") AND (CheckSod.[Sale] = """+Акция+""") group by CheckSod.KodTov";
1 VoditelKobyly
 
22.03.16
08:48
Даты в каком формате лежат в таблице?
Приведи в запросе к одинаковым форматам
2 asady
 
22.03.16
08:48
(0) скорее всего даты в литералы переводишь не так как требуется
3 geniusbsd
 
22.03.16
08:53
Вот сформированная строка запроса в базе даты 17.12.15

select CheckSod.[KodTov], sum(CheckSod.[Cena]) As Cena, sum(CheckSod.[Kvo]) As Kvo from CheckSod inner join CheckHead on CheckSod.IdCheck=CheckHead.Id where (CheckSod.dat>="01.03.16")  AND (CheckSod.dat<="31.03.16") AND (CheckSod.[Sale] = "1+1 (50%)") group by CheckSod.KodTov
4 los_hooliganos
 
22.03.16
08:53
Дата неявно в строку преобразуется вида '20150322'
5 ДенисЧ
 
22.03.16
08:54
(4) Давно?
6 geniusbsd
 
22.03.16
08:56
Так как мне правильно задать дату ?
7 geniusbsd
 
22.03.16
08:57
Меня смущают кавычки CheckSod.dat<="31.03.16"
8 los_hooliganos
 
22.03.16
08:58
(5) что давно?
9 ДенисЧ
 
22.03.16
08:58
(8) "Дата неявно в строку преобразуется вида '20150322'"
10 Ёпрст
 
22.03.16
09:09
(3) приведи дату к нормальному виду и выкинь ковычки везде, и в условии на CheckSod.[Sale] = "1+1  тоже
11 Ёпрст
 
22.03.16
09:10
И, если че,есть символ переноса строки, писать  SQLText=SQLText+" не надо
12 los_hooliganos
 
22.03.16
09:10
Вот такой изврат выдал Access

SELECT Таблица1.ДатаКуйни, Таблица1.Куйня
FROM Таблица1
WHERE (((Таблица1.ДатаКуйни)>#1/1/2015#));
13 geniusbsd
 
22.03.16
09:26
{D:\1C-DB\EXTFORMS\АКЦИИМДБ.ERT(37)}: Microsoft JET Database Engine: Ошибка синтаксиса в выражении запроса '(CheckSod.dat>=01/03/2016)  AND (CheckSod.dat<=31/03/2016) AND (CheckSod.[Sale] = 1+1 (50%))'.
14 los_hooliganos
 
22.03.16
09:28
(13) Попробуй для проверки

WHERE (((CheckSod.dat)>#1/3/2016#))
15 Ёпрст
 
22.03.16
09:36
(13) ну ясен пень, условие на дату в одинарных ковычках и на строку sale тоже
16 geniusbsd
 
22.03.16
09:51
Вот запрос выданный контруктором Access

SELECT CheckSod.SumOpl, CheckSod.Dat, CheckSod.Sale
FROM CheckSod
WHERE (((CheckSod.Dat)>='01.03.16' And (CheckSod.Dat)<='31.03.16') AND ((CheckSod.Sale)="1+1 (50%) "));

Выборка по sale работаеn а вот период берет с 01.01.16 Если делать  одно условие по дате   CheckSod.Dat)='01.03.16' И условие Sale то за одну дату все берется правильно
17 geniusbsd
 
22.03.16
09:58
(14) точно такой же  результат как при моем запросе
18 Ёпрст
 
22.03.16
11:17
19 los_hooliganos
 
22.03.16
11:20
(18) Это для 2010, а у автора возможно 2003 или 97
20 geniusbsd
 
22.03.16
12:36
Капец посмотрел структуру mdb поле dat Оказалось текстовым
21 geniusbsd
 
22.03.16
12:59
Данная конструкция должна работать и с текстовыми полями

FROM CheckSod
WHERE (((CheckSod.Dat)>='01.03.16' And (CheckSod.Dat)<='31.03.16') AND ((CheckSod.Sale)="1+1 (50%) "));
Where Check.sod.dat like "*03.16"

должен дать все записи за месяц в access работает а через 1с пустой результат запроса
22 Ёпрст
 
22.03.16
13:02
ну покажи, как ты ЭТО в 1с-ине написал
23 Ёпрст
 
22.03.16
13:03
и.. че за синтаксис через ; и два Where  ?
24 geniusbsd
 
22.03.16
13:30
ПДат="*"+Прав(дат1,6)+"*";
SQLText="select CheckSod.[KodTov], sum(CheckSod.[Cena]) As Cena, sum(CheckSod.[Kvo]) As Kvo ";
        SQLText=SQLText+"from CheckSod inner join CheckHead on CheckSod.IdCheck=CheckHead.Id ";
SQLText=SQLText+"where (CheckSod.dat> Like """+ПДат+""")   AND (CheckSod.[Sale] = """+Акция+""") group by CheckSod.KodTov
25 geniusbsd
 
22.03.16
13:32
Правка where (CheckSod.dat Like """+ПДат+""")
26 Ёпрст
 
22.03.16
13:37
(24) молодец, теперь сравни с (21) и найди отличия самостоятельно
27 geniusbsd
 
22.03.16
13:40
(26) переменная адат?
28 geniusbsd
 
22.03.16
13:41
Пдат
29 Ёпрст
 
22.03.16
13:42
(27) CheckSod.dat> Like """+ПДат+""" Это че ?
30 geniusbsd
 
22.03.16
13:53
(29) я ж исправил here (CheckSod.dat Like """+ПДат+""")
это была опечатка
31 geniusbsd
 
22.03.16
13:54
Со смартфона не удобно текст набирать
32 Ёпрст
 
22.03.16
14:04
(30) а ничего, что ковычки не те ?
33 geniusbsd
 
22.03.16
14:45
Двойные
34 geniusbsd
 
22.03.16
14:56
Вот что выдает Сообщить (SqlText);
select CheckSod.[KodTov], sum(CheckSod.[Cena]) As Cena, sum(CheckSod.[Kvo]) As Kvo from CheckSod inner join CheckHead on CheckSod.IdCheck=CheckHead.Id where (CheckSod.[dat] Like "*.03.16*")  AND (CheckSod.Sale = "1+1 (50%)") group by CheckSod.KodTov
35 NorthWind
 
22.03.16
16:04
я вот только не понял - зачем вы джойнитесь с checkhead, если вы нигде не используете полей из него?
36 geniusbsd
 
22.03.16
17:00
В принципе можно и без него
37 NorthWind
 
22.03.16
17:10
да я бы сказал, что нужно без него. Если у вас столбец dat типа "дата", то можно примерно так

select kodtov, sum(cena), sum(kvo) from checksod
where month(dat)=3 and year(dat)=2016 and sale='1+1 (50%)'
group by kodtov
38 geniusbsd
 
22.03.16
17:36
(37) Dat Текст
39 NorthWind
 
22.03.16
18:54
(38) тогда можно оставить условие с лайком