我用 query 查询得一组数据 ,显示在dbgrid 中.如图
change    created_date      staff_id     name
123        1983-04-22           2004      王
.....        ..........         ......
其中查询的时候是用 以created_date  为条件,用两个DateTimePicker 输入查询时间段的
change  有正有负 但是为整数,打印时正的加到一起.负的加到一起,staff_id 可能不同可能相同
现在需要打印出来.打印格式如下
staff_id   name  DateTimePicker1 DateTimePicker2  change(正)  change(负)  合计
.......     ..    .............   ..............   ........    .......    ...
也就是把dbgrid表中的数据汇总.如果staff_id相同 那很好办对吧.就是打印一行 可是不同呢
请大哥们指导.是用什么控件好?我用qreport  比较困难 因为由于staff_id 的不确定性.就需要在report中动态创建了表格了.复杂.直接用tprint 类吗 ? 我不会.各位大哥们指导
最好写清楚语句.呵呵 .谢先

解决方案 »

  1.   

    假设你的表结构如下:表tablechange    created_date      staff_id     name
    123        1983-04-22           2004      王
    .....        ..........         ......SQL如下:sql := 'SELECT a.staff_id,a.name,' +
    '(SELECT ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + '''' + ') '+
    'AS DateTimePicker1,' +
    '(SELECT ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + '''' + ') '+
    'AS DateTimePicker2,' +
    '(SELECT SUM(change) FROM table ' +
    'WHERE staff_id=a.staff_id AND name=a.name AND change>0 AND ' +
    'created_date BETWEEN ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + ''''+
    ' AND ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + '''') AS change(正),' +
    '(SELECT SUM(change) FROM table ' +
    'WHERE staff_id=a.staff_id AND name=a.name AND change<0 AND ' +
    'created_date BETWEEN ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + ''''+
    ' AND ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + '''') AS change(负),' +
    'SELECT (change(正)+change(负) FROM table AS ''合计'' '+
    'FROM table a'
     
    TAdoQuery1.SQL.Add(sql);
      

  2.   

    不好意识太长了,有点小错误sql := 'SELECT a.staff_id,a.name,' +
    '(SELECT ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + '''' + ') '+
    'AS DateTimePicker1,' +
    '(SELECT ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + '''' + ') '+
    'AS DateTimePicker2,' +
    '(SELECT SUM(change) FROM table ' +
    'WHERE staff_id=a.staff_id AND name=a.name AND change>0 AND ' +
    'created_date BETWEEN ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + ''''+
    ' AND ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + '''') AS change(正),' +
    '(SELECT SUM(change) FROM table ' +
    'WHERE staff_id=a.staff_id AND name=a.name AND change<0 AND ' +
    'created_date BETWEEN ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + ''''+
    ' AND ' + '''' + DateTimeToStr(DateTimePicker1.DateTime) + '''') AS change(负),' +
    'SELECT (change(正)+change(负)) AS ''合计'' FROM table '+ //这里改一下
    'FROM table a'
      

  3.   

    sorry,sorry,上面那句再改一下
    'SELECT (change(正)+change(负)) AS ''合计'' '+ //
      

  4.   

    晕啊 晕啊 哥哥  我的意思是 我已经查询出来一组数据放入 dbgrid中了 
    在 dbgrid 中显示为如下:
    change    created_date      staff_id     name
    123        1983-04-22           2004      王
    -56        1983-05-10           2051      方
    .....        ..........         ......   ....
    现在我需要打印出来 打印出来的格式如下:
    staff_id   name  DateTimePicker1 DateTimePicker2  change(正)  change(负)  合计
    .......     ..    .............   ..............   ........    .......    ...
    请问如何打印:::::::
      

  5.   

    我也晕啊 晕啊 哥哥
    你再放个DBGrid,按上面的SQL查询
    在用报表控件把DBGrid打印出来不就可以了(比如:FastReport的frPrintGrid)