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