我想不出更好的标题。如果您有任何建议,请随时编辑我的帖子标题。
我有一个如下所示的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中也是如此吗?
答案 0 :(得分:0)
您可以使用:
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?
如果SQL99和更高版本在功能上依赖于GROUP BY列,则按可选功能T301允许此类非聚合
答案 1 :(得分:0)
在Foxpro(Visual Foxpro 8和更早版本)中,这样的错误看起来像接受无效的group by子句。 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 ;
但是在这种情况下,您可以获得多个记录,并且按几个字段分组。