我想不出更好的标题了。如果你有任何建议,请随时编辑我的帖子的标题。
我有一个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语句不会因为group by中只列出一列而失败吗?
编辑:
我不是在寻找解决方案来修复我的foxpro语句。
在TSQL中,如果select语句中有多个列,即使没有使用聚合函数,也不能只按1列分组。
在Foxpro中也是这样吗?
发布于 2019-01-03 01:57:15
您可以使用:
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之间的情况相同:Group by clause in mySQL and postgreSQL, why the error in postgreSQL?
如果这些非聚合在功能上依赖于GROUP BY columns T301,则
SQL99及更高版本允许每个可选要素使用此类非聚合
发布于 2019-01-21 14:53:45
在Foxpro (Visual Foxpro 8和更早版本)中接受这样无效的group by子句看起来像是错误。select中列出的所有非聚合值的字段也应该是group by字段的一部分。
如下所示:
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 ;
但在这种情况下,您可以获得多个记录,有几个字段分组。
https://stackoverflow.com/questions/54010981
复制相似问题