Foxpro VS SQL Logic - PullRequest
       21

Foxpro VS SQL Logic

0 голосов
/ 02 января 2019

Я не мог придумать лучшего названия. Если у вас есть какие-либо предложения, не стесняйтесь редактировать заголовок моего сообщения.

У меня есть запрос foxpro, который выглядит так:

Sele
 a.plan_enddt as enddt, a.plrevno, a.keyfld, "PLAN    " as source ;
    from a_plan a inner join c_temp1a_pre b ;
    on a.keyfld=b.keyfld and a.plrevno=b.plrevno ;
    into cursor c_temp1a ;
    group by a.keyfld ;
    where a.plan_enddt>=date1 ;

То, что я пытаюсь сделать, это перевести с foxpro на T-SQL.

Не сработает ли этот оператор foxpro, потому что в группе только 1 столбец указан?

Редактировать:

Я не ищу решения для исправления моего заявления foxpro

В TSQL нельзя просто сгруппировать по 1 столбцу, если в операторе выбора есть несколько, даже если вы не используете статистическую функцию.

Это также верно в Foxpro?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Это выглядит как ошибка в Foxpro (Visual Foxpro 8 и более ранних версиях) для принятия такой неверной группы по предложению. Все поля, перечисленные в select, которые не являются агрегированными значениями, также должны быть частью групп по полям.

Как это:

select min(a.plan_enddt) as enddt, min(a.plrevno) as plrevno, a.keyfld, "PLAN " as source from a_plan a inner join c_temp1a_pre b on a.keyfld=b.keyfld and a.plrevno=b.plrevno into cursor c_temp1a group by a.keyfld where a.plan_enddt>=date1 ;

или это:

select a.plan_enddt as enddt, a.plrevno, a.keyfld, "PLAN " as source from a_plan a inner join c_temp1a_pre b on a.keyfld=b.keyfld and a.plrevno=b.plrevno into cursor c_temp1a group by a.keyfld, a.plan_enddt, a.plrevno where a.plan_enddt>=date1 ;

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

0 голосов
/ 02 января 2019

Вы можете использовать:

Select MIN(a.plan_enddt) as enddt, MIN(a.plrevno), a.keyfld, 'PLAN    ' as [source]
from a_plan a 
inner join c_temp1a_pre b
  on a.keyfld=b.keyfld 
 and a.plrevno=b.plrevno 
where a.plan_enddt>=date1
group by a.keyfld ;

«Я не ищу решения для исправления моего заявления foxpro»

Это тот же случай, что и между MySQL и PostgreSQL: Группировка по выражению в mySQL и postgreSQL, почему ошибка в postgreSQL?

SQL99 и более поздние версии разрешают такие неагрегаты для дополнительной функции T301, если они функционально зависят от столбцов GROUP BY

T-SQL 2.1.2.221 T301, Функциональные зависимости

...