2017-03-01 55 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;