在其中,SQL Server
您可以执行sum(field1)以获取与groupby子句匹配的所有字段的总和。
但是我需要减去而不是求和的字段。
有没有类似sum(field1)的东西可以代替sum(field1)使用?
例如,table1具有以下内容:
name field1
A 1
A 2
B 4
询问:
select name, sum(field1), subtract(field1)
from table1
group by name
会给我:
A 3 -1
B 4 4
希望我的问题清楚。
编辑 :
还有一个我可以使用的排序字段。这样可以确保值1和2始终会导致-1而不是1。
我需要的是A的所有值都减去,在我的示例中1-2 = -1
EDIT2:如果A组的值是1,2,3,4,则结果必须是1-2-3-4 = -8
假设您有一列指示顺序的列,以选择每个组的第一个元素,则可以使用窗口函数来计算substract
:
CREATE TABLE tab(ID INT IDENTITY(1,1) PRIMARY KEY, name CHAR(1), field1 INT);
INSERT INTO tab(name, field1) VALUES ('A', 1), ('A', 2), ('B', 4);
SELECT DISTINCT
name
,[sum] = SUM(field1) OVER (PARTITION BY name)
,[substract] = SUM(-field1) OVER (PARTITION BY name)
+ 2*FIRST_VALUE(field1) OVER(PARTITION BY name ORDER BY ID)
FROM tab;
输出:
╔══════╦═════╦═══════════╗
║ name ║ sum ║ substract ║
╠══════╬═════╬═══════════╣
║ A ║ 3 ║ -1 ║
║ B ║ 4 ║ 4 ║
╚══════╩═════╩═══════════╝
警告:
FIRST_VALUE
可从 SQL Server 2012+
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句