1

我使用的是 SQL Server 2005,我想获取 1 张发票的总值

电流输出:

Invoice     price    
-------------------
1234       2000    
1234       2500     
9012        3000       
3456        1000       

但是我的选择字段(这是价格)已经很长了,我不知道如何在上面加上总和,

   RIGHT('000000000000'+ convert(varchar,cast(A.IVC_ForeignGrossAmt as decimal(9,2))),13) as IVC_ForeignGross,

预期的输出应该是:

Invoice     price   
-------------------
1234       4500        
1234       4500       
9012        3000       
3456        1000        
4

5 回答 5

2

使用相关子查询,如下所示:

SELECT
  Invoice,
  (SELECT SUM(t2.price)
   FROM table1 t2
   WHERE t1.invoice = t2.invoice) price           
FROM Table1 t1;

SQL 小提琴演示

这会给你:

| INVOICE | PRICE |
-------------------
|    1234 |  4500 |
|    1234 |  4500 |
|    9012 |  3000 |
|    3456 |  1000 |
于 2013-01-01T14:04:25.320 回答
2

您可以使用SUM-OVERwith PARTITION BY Invoice(类似于 a Group By):

SELECT
   Invoice, SUM(price) OVER (PARTITION BY Invoice) AS price   
FROM 
   dbo.Table

(但是,不确定RIGHT('000000000000...您的问题的一部分)

于 2013-01-01T14:07:17.550 回答
0

你的意思是输出应该是,

Invoice     price   
-------------------
1234       4500             
9012        3000       
3456        1000 

你可以试试

SELECT INVOICE.ID, SUM(PRICE) FROM INVOICE
GROUP BY INVOICE.ID
于 2013-01-01T14:04:04.297 回答
0
SELECT Invoice, SUM(price) FROM table1 GROUP BY Invoice;
于 2013-01-01T14:06:22.300 回答
0

您只需要SUM基于GROUP BY发票上的价格,并根据需要格式化价格。

SELECT A.Invoice, 
RIGHT('000000000000'+ convert(varchar,cast(SUM(A.IVC_ForeignGrossAmt)
as decimal(9,2))),13) as IVC_ForeignGross 
FROM yourTable A
GROUP BY Invoice;
于 2013-01-01T14:07:44.940 回答