我的表中有以下数据,我想在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的最后记录。
答案 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来汇总数据。