2013-10-30 167 views
-1

我有以下表格。與金額和支付一個領域Group by in Postgresql

partner    sale_order Amount  Paid    
Administrator   s0002   100  done   
Administrator   s0007   100  
Administrator   s0004   100  done 
Administrator   s0009   100 
Administrator   s0003   100 
Demo User    s0001   200  done 
Demo User    s0005   200  done 
Demo User    s0008   200 

我的願望輸出將是

partner   amount  paid_amount 
Administrator  500   200 
    s0002   100   100 
    s0007   100 
    s0004   100   100 
    s0009   100 
    s0003   100 
    s0006   100 
Demo User   600   400 
    s0001   200   200 
    s0008   200   200 
    s0005   200 

這可能嗎? 這是編輯之一。這是第二次編輯,如果可能或不?

+0

看起來你是真正的新的SQL。 SQL中的輸出通常是包含行和列的表。你想要的輸出有一列還是兩列? –

+0

是的,這裏total_amount列是那裏,但在這個時候我需要這種輸出在單行像願望輸出。 –

+0

不確定這是你所需要的,但爲了在一列中得到這個輸出,你可以'從table1 union中選擇不同的合作伙伴all select從table1中選擇sale_order' –

回答

0
with cte(partner, amount, sort, sort2) as (
    select 
     partner, sum(amount), partner, 0 
    from table1 
    group by partner 

    union all 

    select 
     sale_order, amount, partner, 1 
    from table1 
) 
select data, amount 
from cte 
order by sort, sort2 
+0

現在假設我添加了另一個列,比如在查詢中會發生什麼變化?並且有可能加上總額是與慾望輸出的子量一起顯示? –

+0

@ShyamSolanki更改了答案 –

+0

它僅分別加入一列未顯示金額欄。 –

0

簡單的解決辦法:

SELECT sale_order FROM 
(
    select partner, sale_order from tablename 
    UNION 
    select partner||'1',partner FROM tablename 
) 
AS temp 
ORDER BY partner desc 
+0

假設你的表中有夥伴'P'和'P1'。請問這個訂單是否正確? –

+0

是的,這是好的,但我增加了另一列像金額比我想要輸出在兩列第一列與慾望輸出相同,第二列是金額列在第一級像p1 ----> total_amount和在p1下所有sale_order - - 銷售訂單金額。 –

+0

我認爲更明智的做法是使用不同的+ union all而不是union –