Foxpro VS SQL Logic



我想不出更好的标题。如果您有任何建议,请随时编辑我帖子的标题。

我有一个看起来像这样的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 中,如果 select 语句中有多个列,则不能只按 1 列分组,即使您没有使用聚合函数也是如此。

Foxpro中也是如此吗?

您可以使用:

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,功能依赖项

在 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 ;

但是在这种情况下,您可以获得多个记录,其中有按几个字段分组。

最新更新