2017-03-01 50 views
1

是否有可能通过group by行添加汇总:具体而言,我正在寻找下面的输出。在Sqlite中添加基于类别的汇总行

主表

Client|Billing 
-------------- 
a  | 34 
a  | 27 
b  | 29 
b  | 27 
c  | 28 
c  | 37 

输出应该看起来很相像:

Client|Billing 
-------------- 
a  | 34 
a  | 27 
Total | 61 
b  | 29 
b  | 27 
Total | 56 
c  | 28 
c  | 37 
Total | 65 

在此,第一总被计费客户机的总和,同样地在接下来的2个总计是总和的客户b和c分别。

我能够达到类似的这类要求与下面的代码: 选择投(客户端为varchar(10))客户端,从MYDATA UNION ALL 选择“总计”,SUM(开票) 从计费 MYDATA组由客户

但是总排在末尾的到来,像下面:(

Client|Billing 
    a |34 
    a |27 
    b |29 
    b |27 
    c |28 
    c |37 
Total |61 
Total |56 
Total |65 
+1

你可以使用ROLLUP,但一般来说,我认为这是最好的处理这种事情的应用程序代码。 – Strawberry

+0

@Strawberry SQLite没有WITH ROLLUP。 –

+0

是正确的,因为sqlite不提供使用汇总的自由,我正在努力满足这种需求。任何人都可以帮助我,因为这对我来说非常紧迫。 –

回答

2

检查。

select * from mydata 
    union 
    select (Client ||'_Total') Client 
    ,SUM(Billing)sum from mydata 
    group by Client 
    order by Client 
+0

感谢您向我展示另一种方式。尽管concat命令在sqlite中不起作用,但下面的代码可以完成这个任务:select * from mydata union select(Client ||'_Total')客户端,SUM(Billing)sum from mydata group by Client order by Client –

+0

@ayushvarshney我错过了你在使用SQLLIte。好的,但是逻辑与你创建的查询是相同的。仍然有任何帮助问任何时候ayush。 HND –

0

我转换@ mr.bhosale的答案源码

试试这个

select * from table_name 
    union 
    select Client || '_Total' Client ,SUM(Billing)sum from table_name 
    group by Client 
    order by Client 
-1
select * from mydata 
    union 
    select (Client ||'_Total') Client ,SUM(Billing)sum from mydata 
    group by Client 
    order by Client 
+2

尽管此代码片段可能会解决问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 –

0

要正确排序“总计”栏,你必须保持客户端名称,以便您可以稍后排序;该OrderNr列用于相同的客户端的其他行之后的总数进行排序:

SELECT DisplayName AS Client, 
     Billing 
FROM (SELECT Client AS DisplayName, 
      Client, 
      Billing, 
      1 AS OrderNr 
     FROM MyTable 

     UNION ALL 

     SELECT 'Total', 
      Client, 
      sum(Billing), 
      2 AS OrderNr 
     FROM MyTable 
     GROUP BY Client) 
ORDER BY Client, 
     OrderNr;