不同意楼上的,group by 之后一定要把 select 之后的列名全部列出来(没有使用聚集函数的列),否则出错. to whxxr (彬彬) : 如果你那种写法得到正确的结果的话我想已经是最简单的了!!
to lysshe(蛇子) 不是一定要把所有列名列出来啊!你用的是什么数据库?我在vfp,paradox试过可以啊!!
select ... from tableName group by ... having...
用程序写了一个,没有编译你试试吧!var i,j : Integer; ss : array of String; str,ff : string; begin setlength(ss,ADOQuery1.FieldCount); for i:=0 to ADOQuery1.FieldCount-1 do begin if ADOQuery1.Fields[i].DisplayName<>'DISTINCT(列名1)' then begin ss[i]:=','+ADOQuery1.Fields[i].DisplayName end; end; for j:=low(ss) to high(ss) do begin ff:=ff+ss[j]; end; str:='select DISTINCT(列名1)'+ff+' from aaa'; end;
to whxxr (彬彬) :
如果你那种写法得到正确的结果的话我想已经是最简单的了!!
不是一定要把所有列名列出来啊!你用的是什么数据库?我在vfp,paradox试过可以啊!!
i,j : Integer;
ss : array of String;
str,ff : string;
begin
setlength(ss,ADOQuery1.FieldCount);
for i:=0 to ADOQuery1.FieldCount-1 do
begin
if ADOQuery1.Fields[i].DisplayName<>'DISTINCT(列名1)' then
begin
ss[i]:=','+ADOQuery1.Fields[i].DisplayName
end;
end;
for j:=low(ss) to high(ss) do
begin
ff:=ff+ss[j];
end;
str:='select DISTINCT(列名1)'+ff+' from aaa';
end;