2,498
社区成员
发帖
与我相关
我的任务
分享
procedure Toffermain.N2Click(Sender: TObject);
var
a,b,i:Integer;
p:PChar;
c:Extended;
begin
Data1.of_b_q.Edit;
DBGrid1.Columns[5].PickList.Clear;
with Data1.q_dbte do
begin
Close;
SQL.Clear;
SQL.Text:='select prd_mark,sum(cst_make+cst_prd+cst_man+cst+cst_out) as cst_all from mf_bom where prd_no='+QuotedStr(Data1.of_b_q.fieldByName('prd_no').AsString)+' group by prd_mark order by prd_mark';
Open;
a:=Data1.q_dbte.RecordCount;
end;
if a>0 then
begin
b:= a mod 2;
if b=1 then
c:=(a+1)/2
else
c:=(a+2)/2;
for i:=1 to a do
begin
if i=c then
begin
Data1.of_b_q.FieldByName('prd_mark').Value:=Data1.q_dbte.FieldByName('prd_mark').Value;
Data1.of_b_q.FieldByName('p_cost').Value:=Data1.q_dbte.FieldByName('cst_all').Value;
Data1.of_b_q.FieldByName('prd_p').Value:=Data1.q_dbte.FieldByName('cst_all').Value;
ShowMessage(Data1.of_b_q.FieldByName('prd_mark').AsString);
end;
//DBGrid1.Columns[6].PickList.Add(Trim(Data1.q_dbte.FieldByName('prd_mark').AsString));
Data1.q_dbte.Next;
end;
if (Trim(Data1.q_dbte.FieldByName('prd_mark').AsString)='') and (i=1) then
begin
p:=PChar('款号:'+Trim(Data1.of_b_q.fieldByName('prd_no').AsString)+' 查询到 '+IntToStr(a)+' 个无指围BOM表');
Application.MessageBox(p,'提示:',0+64);
end
else
begin
p:=PChar('款号:'+Trim(Data1.of_b_q.fieldByName('prd_no').AsString)+' 查询到 '+IntToStr(a)+' 个指围');
Application.MessageBox(p,'提示:',0+64);
end;
end
else
begin
p:=PChar('款号: '+Trim(Data1.of_b_q.fieldByName('prd_no').AsString)+' 无BOM表');
Application.MessageBox(p,'提示:',0+64);
end;
end;
用了循环语句搞定了,方法是笨了点。declare @Half int
select @Half=(count(*)+1)/2 from TableName order by prd_no,prd_mark
exec('
select top 1* from (select top '+@Half+' * from TableName order by prd_no,prd_mark
) a order by prd_no desc,prd_mark desc
')
上面是个比较通用的办法,如果你的MSSQL是2005以上版本的话,是可以有更简单办法的(用Row_NUMBER()等函数)