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