Вопрос по выгрузки из БД

Автор AlfaLucky, 17 апреля 2019, 11:22:18

« назад - далее »

AlfaLucky

Добрый день,Не корректно работает выгрузка данных если мы совмещаем фильтра по дате и по видом накладных, фильтр по дате отрабатывает но вид документов попадает только 101, во втором варианте всё работает, но сделано через костыль и для проверки.

KATSOPRold:
SQL SELECT

KATSOPR.NREC,
KATSOPR.CDOGOVOR,
KATSOPR.NAME,
KATSOPR.CORG,
KATSOPR.CVAL,
KATSOPR.DPRICE,
KATSOPR.DOPR,
KATSOPR.DSOPR,
KATSOPR.NSOPR,
KATSOPR.VIDSOPR,
KATSOPR.CPODRFROM,
KATSOPR.CPODRTO

FROM BDMAV91.KATSOPR
where ((KATSOPR.DSOPR < '132251905' and KATSOPR.DSOPR <> '0')
and
(VIDSOPR = 101 or VIDSOPR = 201 or VIDSOPR = 206 or VIDSOPR = 106 or VIDSOPR = 502 or VIDSOPR = 504));
STORE * from KATSOPRold into KATSOPRold.qvd(qvd);
DROP Table KATSOPRold;

Попробовал выгрузить их таким способом и у меня выгрузилось.

KATSOPRold:
SQL SELECT

KATSOPR.NREC,
KATSOPR.CDOGOVOR,
KATSOPR.NAME,
KATSOPR.CORG,
KATSOPR.CVAL,
KATSOPR.DPRICE,
KATSOPR.DOPR,
KATSOPR.DSOPR,
KATSOPR.NSOPR,
KATSOPR.VIDSOPR,
KATSOPR.CPODRFROM,
KATSOPR.CPODRTO

FROM BDMAV91.KATSOPR
where ((KATSOPR.DSOPR < '132251905' or KATSOPR.DSOPR <> '0'));
STORE * from KATSOPRold into KATSOPRold.qvd(qvd);
DROP Table KATSOPRold;

KATSOPRold1:
LOAD *
FROM $(vDirectory)KATSOPRold.qvd(qvd)
where ((VIDSOPR = 101 or VIDSOPR = 201 or VIDSOPR = 206 or VIDSOPR = 106 or VIDSOPR = 502 or VIDSOPR = 504));

STORE * from KATSOPRold1 into KATSOPRold1.qvd(qvd);
DROP Table KATSOPRold1;


admin

А что некорректного в загрузке?
Проверьте первый запрос в SQL MS.

AlfaLucky

Запрос отрабатывает, но попадают только KATSOPR.DSOPR < '132251905' and KATSOPR.DSOPR <> '0' и VIDSOPR = 101,
 а нужно что бы попадали VIDSOPR = 101 or VIDSOPR = 201 or VIDSOPR = 206 or VIDSOPR = 106 or VIDSOPR = 502 or VIDSOPR = 504

И я не могу понять почему не попадают другие документы.

Например если их запускать по раздельности, применяя сначала фильтр по дате, а потом фильтр по документам, то все данные попадают(во втором примере кода).

admin

Цитата: AlfaLucky от 17 апреля  2019, 01:33:53  Запрос отрабатывает, но попадают только KATSOPR.DSOPR < '132251905' and KATSOPR.DSOPR <> '0' и VIDSOPR = 101,
 а нужно что бы попадали VIDSOPR = 101 or VIDSOPR = 201 or VIDSOPR = 206 or VIDSOPR = 106 or VIDSOPR = 502 or VIDSOPR = 504
Следовательно, проблема в параметрах условиях Where.
Проведите отладку запроса, ради эксперимента замените and на or между группами условий.

AlfaLucky

Запрос отрабатывает. В данном запросе попадают все виды документов и документы с заданной даты , что является некорректно

admin

 :)  OK, а если так:
KATSOPR.DSOPR < '132251905' and KATSOPR.DSOPR <> '0'
and
(VIDSOPR = 101 or VIDSOPR = 201 or VIDSOPR = 206 or VIDSOPR = 106 or VIDSOPR = 502 or VIDSOPR = 504)
Дальше не буду "издеваться".
Следует правильно составить условие в запросе с учетом порядка и приоритетов срабатывания скобок AND OR и отладить его в Managment Studio или любом другом инструменте.
Qlik всего лишь отправляет sql-запрос через ODBC драйвер или коннектор и принимает ответ.

AlfaLucky

Я так и не понял почему не работает, сделал по такой схеме.

where (
(KATSOPR.VIDSOPR = 101 and KATSOPR.DSOPR >= 132251905) or
(KATSOPR.VIDSOPR = 201 and KATSOPR.DSOPR >= 132251905) or
(KATSOPR.VIDSOPR = 206 and KATSOPR.DSOPR >= 132251905) or
(KATSOPR.VIDSOPR = 106 and KATSOPR.DSOPR >= 132251905) or
(KATSOPR.VIDSOPR = 502 and KATSOPR.DSOPR >= 132251905) or
(KATSOPR.VIDSOPR = 504 and KATSOPR.DSOPR >= 132251905)
);

AlfaLucky

Вот ещё один рабочий вариант
where (
KATSOPR.DSOPR >= '132251905' and
(KATSOPR.VIDSOPR IN (101, 201, 206, 106, 502, 504)));

Яндекс.Метрика