如何在SQL查询中对ID的最后一条记录进行一些算术运算

时间:2015-01-09 06:40:25

标签: sql sql-server sql-server-2012

我的表中有以下数据,我想在SQL查询中进行一些算术运算,当它到达每个id的最后一条记录时,在下表中以粗体显示。

表名:发票

ID       Amount  Tax_Amount
-------------------------------
500324    $46.5   0.6
500324    $46.5   0.6
500324    $46.5   2.01 --> Need to do some arithmetic operation here
500326    $46.5   0.6   
500326    $46.5   0.6   
500326    $46.5   0.6   
500326    $46.5   2.01 -->Need to do some arithmetic operation here
500327    $46.5   0.6   
500327    $46.5   2.01 -->Need to do some arithmetic operation here

如何编写一个SQL查询,以确定它是微粒ID的最后记录。

3 个答案:

答案 0 :(得分:0)

如果你有一个独特的密钥会更好。假设您有这样的列(让我们称之为RECORD_ID)。 在这种情况下,以下查询将适用于您:

UPDATE TableName 
SET Tax_Amount = MATH_FUNCTION(Tax_Amount) 
WHERE RECORD_ID = (SELECT RECORD_ID FROM TableName WHERE RECORD_ID = MAX(RECORD_ID));

如果您只想在SELECT上显示计算值(不修改它):

SELECT ID,Amoun,      CASE 
     WHEN RECORD_ID = MAX(RECORD_ID) THEN MATH_FUNCTION(TaxAmount)
     ELSE TaxAmount
  END AS TaxAmount
FROM TableName

可能是一些语法问题,因为我没有SQL Server。

此外,您可以使用特定于数据库的功能来使查询更加优化。

MATH_FUNCTION可以是database_specific或标准函数之一或函数组合。对于MySQL,您可以找到功能列表: http://dev.mysql.com/doc/refman/5.0/en/numeric-functions.html

答案 1 :(得分:0)

如果您使用的是SQL Server 2008或更高版本,则可以使用ROLLUP() GROUP BY功能并添加总计行:

SELECT
  ID= ISNULL(ID, 'Total'),
  Amount= Amount,
  Tax_Amount_Total = SUM(Tax_Amount)
FROM Invoices
GROUP BY ROLLUP(ID, Amount)

答案 2 :(得分:0)

您可以在SQL Server中使用Rollup来汇总数据。