Mysql 试图在TMemo中显示求和查询的结果

Mysql 试图在TMemo中显示求和查询的结果,mysql,delphi,Mysql,Delphi,我试图在价格字段(包含价格)上显示SQL总和查询的结果,从日期(时间戳字段)开始按月对结果进行分组,并使用WHERE子句,该子句仅显示包含特定单词的结果(在本例中为对开本)包含在另一个字段中,指向TMemo 因此,我的查询如下所示: select date_format(data, '%M-%Y'), sum(pret) as test from arhivalux where statistica='Folio' group by statistica, year(data), month(d

我试图在价格字段(包含价格)上显示
SQL总和查询的结果,从日期(
时间戳
字段)开始按月对结果进行分组,并使用
WHERE
子句,该子句仅显示包含特定单词的结果(在本例中为对开本)包含在另一个字段中,指向
TMemo

因此,我的查询如下所示:

select date_format(data, '%M-%Y'), sum(pret) as test from arhivalux where statistica='Folio' group by statistica, year(data), month(data)
当我在phpMyAdmin中运行此命令对其进行测试时,它返回以下内容:

结果对应于11月、12月、1月和2月——因为我在数据库中只有这些月的条目,所以查询可以工作

在Delphi中,使用以下代码进行测试:

procedure TForm2.Button1Click(Sender: TObject);
begin
 Query.Close;
 Query.SQL.Text := ('select date_format(data, ''%M-%Y''), sum(pret) as test from arhivalux where statistica=''Folio'' group by statistica, year(data), month(data)');
 Query.Open;
 Memo1.Lines.Text := Query.FieldByName('test').AsString;

end;
它可以工作,但只显示第一个值,11679不是全部4,并且在值前面没有Y/M。 第一次尝试这个,所以我一定错过了什么


我做错了什么?

您没有提取结果的第一个值,只有第二个值。而且,您并没有遍历所有可用的结果,只查看第一个结果

请尝试以下方法:

procedure TForm2.Button1Click(Sender: TObject);
begin
  Query.Close;
  Memo1.Clear;

  Query.SQL.BeginUpdate;
  try
    Query.SQL.Add('select date_format(data, ''%M-%Y'') as df, sum(pret) as test');
    Query.SQL.Add('from arhivalux');
    Query.SQL.Add('where statistica=''Folio''');
    Query.SQL.Add('group by statistica, year(data), month(data)');
  finally
    Query.SQL.EndUpdate;
  end;

  Query.Open;
  try
    while not Query.Eof do
    begin
      Memo1.Lines.Add(Query.FieldByName('df').AsString + ' = ' + Query.FieldByName('test').AsString);
      Query.Next;
    end;
  finally
    Query.Close;
  end;
end;

有效的SQL需要GROUPBY中的任何COL,也需要SELECT中的COL,尽管MySQL并不抱怨。但是你应该说:选择日期格式(…),求和(pret)…@SIDU谢谢,更新了我的问题-它仍然没有显示备忘录1中的所有值,就像phpmyadmin doesBTW一样,为什么你要按
statistica
对结果进行分组,而所有结果都具有相同的
statistica
值?您应该能够仅通过dates@RemyLebeauStatistica包含3个值,UV-Folio和Promo。每个新订单都会分配给其中一个。在月底,我将运行此查询,以便查看每个机器每月/年生产的总金额(总和)。我计划对每个statistica值执行一个查询(1个用于UV,1个用于Folio,1个用于Promo),并将每个值的结果显示在单独的备忘录中。希望我解释正确,这有意义吗?我在尝试使用teechart时经历了一段噩梦般的时光,但很明显,它只能按统计数据或日期分组,而不能同时按日期分组。您的
WHERE
子句正在搜索其
statistica
值正好是
'Folio'
的记录,因此,所有结果记录的
statistica
值正好为
'Folio'
,因此不需要按
statistica
对它们进行分组。如果您分别搜索
'UV'
'Promo'
,情况也是如此。如果要按不同的
statistica
值对结果进行分组,请删除
WHERE
子句。嘿,雷米,现在只显示最后一个值5017。现在重新检查代码,看看我是否弄错了什么,这是因为代码在每个循环迭代中设置了整个
Memo.Text
,所以只保留最后的结果。我已经更新了这个例子。同时,我想感谢你在这方面的帮助。我现在知道该搜索什么了,所以我一定会搜索关于这个的进一步阅读。谢谢