【问题标题】:Grouping and subtotalling分组和小计
【发布时间】:2014-07-07 13:34:55
【问题描述】:

我目前正在编写一份报告,我希望按字段 apar_id 对其进行分组,并为每个字段设置一个小计。 鉴于我的知识有限并且被许多谷歌答案所迷惑,我要求您提供意见。

我的代码如下:

SELECT d.apar_name,a.*,b.rel_value,c.dim_b
FROM acutrans a 
LEFT JOIN aglrelvalue b ON a.apar_id=b.att_value
LEFT JOIN acrtrees c ON b.rel_value=c.cat_1
LEFT JOIN acuheader d ON a.apar_id=d.apar_id
WHERE b.rel_attr_id='212'
AND b.attribute_id='A4'
AND a.client='CL'
AND a.client=b.client
AND a.client=c.client
AND c.att_agrid='60'
AND (b.rel_value='X24' OR c.dim_b='PCT')
ORDER BY a.apar_id

结果类似于 apar_id | ..... |数量..... × 100 x 300 x -100 是 400 是 100

并且愿意

apar_id | ..... | amount.....
x                 100
x                 300
x                 -100
Total X           300
Y                 400
Y                 100
Total Y           500

提前致谢

【问题讨论】:

  • 您不能在 SQL 语句中运行小计。或者至少,您不能这样做并且还提供详细级别。问题是,您在哪个软件应用程序中运行查询,它为分组和求和提供了哪些工具?
  • 你用的是什么数据库?
  • 我很高兴你是 dba而不是

标签: sql sql-server grouping subtotal


【解决方案1】:

许多数据库支持group bywith rollup 子句。如果您这样做,您可以通过将其设为group by 声明来做您想做的事情。

SELECT d.apar_name, sum(amount) as amount
FROM acutrans a 
LEFT JOIN aglrelvalue b ON a.apar_id=b.att_value
LEFT JOIN acrtrees c ON b.rel_value=c.cat_1
LEFT JOIN acuheader d ON a.apar_id=d.apar_id
WHERE b.rel_attr_id='212'
AND b.attribute_id='A4'
AND a.client='CL'
AND a.client=b.client
AND a.client=c.client
AND c.att_agrid='60'
AND (b.rel_value='X24' OR c.dim_b='PCT')
GROUP BY d.apar_name WITH ROLLUP;

这不会专门解决这个问题,尽管你可以调整这个解决方案(如果你的数据库支持的话)。

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 2015-10-17
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    相关资源
    最近更新 更多