Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Снова запрос / 11 сообщений из 11, страница 1 из 1
12.09.2018, 08:49
    #39701242
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запрос
Здравствуйте!
Написал запрос из 3х таблиц:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT m1.ml_kodv,m1.ml_lc,m1.ml_namlc,
d1.do_date,d1.do_lc1,d1.do_lc2,d1.do_sumv,d1.do_sumn,d1.do_kom,
d2.ds_date,d2.ds_lc1,d2.ds_nlatl,d2.ds_adrl FROM Dbmaslc m1 JOIN
Dokod d1 ON m1.ml_lc=d1.do_lc1 JOIN (SELECT d2.ds_date,d2.ds_lc1,d2.ds_nlatl,d2.ds_adrl FROM dokswt) as d2 ON d2.ds_lc1=d1.do_lc1
WHERE d1.do_date BETWEEN "+Thisform.cl_date1+" AND "+Thisform.cl_date2
AND substring(d1.do_lc2,4,5)='10102'
AND substring(d1.do_lc1,4,5)<>'60303'
AND d1.do_lc1=m1.ml_lc and d1.do_kodv=m1.ml_kodv
ORDER BY do_kodv, do_st, do_date, do_lc1, do_lc2

Подскажите пожалуйста, где я не правильно делаю?
...
Рейтинг: 0 / 0
12.09.2018, 09:03
    #39701247
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запрос
ularsoftПодскажите пожалуйста, где я не правильно делаю?1. Не описал критерии правильности. Для чего этот запрос, что он должен выбрать - неизвестно.
2.
Код: sql
1.
JOIN (SELECT d2.ds_date,d2.ds_lc1,d2.ds_nlatl,d2.ds_adrl FROM dokswt) as d2 


вызывает сомнения в адекватности писателя. Ибо это всего лишь
Код: sql
1.
JOIN  dokswt as d2 


Больше сказать нечего ибо см. п. 1
...
Рейтинг: 0 / 0
12.09.2018, 09:34
    #39701266
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запрос
Sergey Sizov1. Не описал критерии правильности. Для чего этот запрос, что он должен выбрать - неизвестно. m1 - отправители
Код: sql
1.
2.
3.
ml_kodv - код валюты,
ml_lc - счет отправителя, 
ml_namlc - название отправителя

d1 - проводки
Код: sql
1.
2.
3.
4.
5.
6.
do_date - дата сделки, 
do_lc1 - дебет, 
do_lc2 - кредит, 
do_sumv - сумма в валюте, 
do_sumn - сумма в нацвалюте, 
do_kom - назначение

d2 - получатели
Код: sql
1.
2.
3.
4.
ds_date - дата сделки, 
ds_lc1 - счет получателя, 
ds_nlatl - название получателя, 
ds_adrl - адрес получателя
...
Рейтинг: 0 / 0
12.09.2018, 09:41
    #39701268
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запрос
Из этих трех надо получить 4 таблицу со следующими полями:
Дт Кт Дата Сумма Сумма Назначение Валюта Страна Название отправителя Название получателя
...
Рейтинг: 0 / 0
12.09.2018, 09:56
    #39701287
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запрос
ularsoftИз этих трех надо получить 4 таблицу со следующими полями:
Дт Кт Дата Сумма Сумма Назначение Валюта Страна Название отправителя Название получателя
Убери WHERE, т.к. по ТЗ нужны все записи
...
Рейтинг: 0 / 0
12.09.2018, 10:23
    #39701298
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запрос
Dima TУбери WHERE, т.к. по ТЗ нужны все записи За определенный период нужны записи
...
Рейтинг: 0 / 0
12.09.2018, 10:28
    #39701300
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запрос
ularsoftDima TУбери WHERE, т.к. по ТЗ нужны все записи За определенный период нужны записи
Тогда все верно. Проблема в чем?
...
Рейтинг: 0 / 0
12.09.2018, 10:31
    #39701301
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запрос
Подозрительная строка
Код: sql
1.
WHERE d1.do_date BETWEEN "+Thisform.cl_date1+" AND "+Thisform.cl_date2


Ты запрос на какой-то SQL-сервер отправляешь?
...
Рейтинг: 0 / 0
12.09.2018, 10:36
    #39701308
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запрос
Собственно, Вам уже сказали. Вот это не правильно

Код: sql
1.
JOIN (SELECT d2.ds_date,d2.ds_lc1,d2.ds_nlatl,d2.ds_adrl FROM dokswt) as d2



Не может алиас d2 использоваться внутри подзапроса если это алиас самого подзапроса. Внутри надо или вообще алиасы не использовать, либо указывать dokswt

т.е. или так

Код: sql
1.
JOIN (SELECT dokswt.ds_date,dokswt.ds_lc1,dokswt.ds_nlatl,dokswt.ds_adrl FROM dokswt) as d2



или так

Код: sql
1.
JOIN (SELECT ds_date,ds_lc1,ds_nlatl,ds_adrl FROM dokswt) as d2
...
Рейтинг: 0 / 0
12.09.2018, 10:41
    #39701313
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запрос
Ну, и с датами тоже вопрос. Обычно даты окружены какими-то спец.символами. Например, в FoxPro - это фигурные скобки. В MS SQL обычно передают как символьную строку, т.е. в одинарных кавычках. Есть еще вариант окружать символами решетки

Т.е. формировать строка в виде

Код: sql
1.
WHERE d1.do_date BETWEEN "+Thisform.cl_date1+" AND "+Thisform.cl_date2



недостаточно. Надо добавить символы-ограничители дат и, возможно, преобразовать даты к нужному формату
...
Рейтинг: 0 / 0
12.09.2018, 12:03
    #39701366
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова запрос
А если Thisform.cl_date1 и Thisform.cl_date2 типа date, то вообще никаких ограничителей не надо:
Код: sql
1.
BETWEEN Thisform.cl_date1 AND Thisform.cl_date2
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Снова запрос / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]