2015-07-02 21 views
3

我有这样的查询:如何获得的多个记录和一列

SELECT 
    TC.F_Exhibition_Name, 
    T.F_Exhibitor_Name, 
    TC.F_CreditNoteNo, 
    TC.F_Description, 
    TC.F_Price, 
    TC.F_Qty, 
    TC.F_CNqty, 
    TC.F_Totalamt 
FROM T_CreditNote TC 
LEFT JOIN T_Exhibitor T ON 
    T.F_Exhibitor_Name = TC.F_Exhibitor_Name 
WHERE TC.F_CreditNoteNo='CNINV100002' 

输出看起来像这样

---------------------------------------------------------------------------------------------------------------------------------------------------- 
F_Exhibition_Name F_Exhibitor_Name       F_CreditNoteNo F_Description F_Price  F_Qty  F_CNqty  F_Totalamt          
---------------------------------------------------------------------------------------------------------------------------------------------------- 
WORKSPACE 2015  AEP - Associacao Empresarial De Portugal CNINV100002  item1    12   5    8    96 
WORKSPACE 2015  AEP - Associacao Empresarial De Portugal CNINV100002  item2    25   12   10    250 

我想在最后与多加一个列[sum]总金额为F_total。在我的情况下,我想显示sum(250+96) = 346

我该怎么做?

+0

在哪一行这笔钱将显示聚合函数?因为对于聚合,你将不得不使用组,并且通过分组将行合并为一个 –

回答

5

使用SUM OVER()

select TC.F_Exhibition_Name, T.F_Exhibitor_Name, TC.F_CreditNoteNo, 
     TC.F_Description, TC.F_Price,TC.F_Qty, TC.F_CNqty, TC.F_Totalamt, 
     sum(TC.F_Totalamt) OVER() AS SumOfTotalamt 
from T_CreditNote TC 
LEFT JOIN T_Exhibitor T on T.F_Exhibitor_Name=TC.F_Exhibitor_Name 
where TC.F_CreditNoteNo='CNINV100002' 

SUM的窗口版本将返回两行总结的F_Totalamt

+0

@jasbacker如果你的每个组添加了'F_CreditNoteNo',你可以在'SUM OVER()'中添加一个'Partition' 'SUM(TC.F_Totalamt)OVER(PARTITION BY F_CreditNoteNo)' – Eric

+0

@Eric由于'WHERE'子句,查询只返回2行,因此这里不需要'PARTITION BY'子句: “SUM”适用于这两行。 –

+0

@GiorgosBetsos是的你是对的,这只是一个建议,让列逻辑独立于where条件工作。 – Eric

3

您可以使用SUM()

SELECT 
    TC.F_Exhibition_Name, 
    T.F_Exhibitor_Name, 
    TC.F_CreditNoteNo, 
    TC.F_Description, 
    TC.F_Price, 
    TC.F_Qty, 
    TC.F_CNqty, 
    TC.F_Totalamt, 
    SUM(TC.F_Totalamt) as sum_amt 
FROM T_CreditNote TC 
LEFT JOIN T_Exhibitor T ON 
    T.F_Exhibitor_Name = TC.F_Exhibitor_Name 
WHERE TC.F_CreditNoteNo='CNINV100002' 
GROUP BY TC.F_Exhibition_Name, 
    T.F_Exhibitor_Name, 
    TC.F_CreditNoteNo, 
    TC.F_Description, 
    TC.F_Price, 
    TC.F_Qty, 
    TC.F_CNqty, 
    TC.F_Totalamt 
相关问题