sql-server – SQL Server查询 – 分组乘法
发布时间:2020-05-23 06:42:51 所属栏目:MsSql 来源:互联网
导读:如果我们有这样的表格: Grp ValueGrp1 2Grp1 5Grp1 3Grp2 3Grp2 -5Grp2 -2Grp3 4Grp3 0Grp3 1Grp4 -2Grp4
|
如果我们有这样的表格: Grp Value Grp1 2 Grp1 5 Grp1 3 Grp2 3 Grp2 -5 Grp2 -2 Grp3 4 Grp3 0 Grp3 1 Grp4 -2 Grp4 -4 Grp5 7 Grp5 NULL Grp6 NULL Grp6 NULL Grp7 -1 Grp7 10 我们如何分组/乘以得到这个? GrpID Value Grp1 30 Grp2 30 Grp3 0 Grp4 8 Grp5 7 Grp6 NULL Grp7 -10 解决方法乘以行值与添加行值的对数相同诀窍是处理零和空值. 好的,现在检查 DECLARE @foo TABLE (GrpID varchar(10),Value float)
INSERt @foo (GrpID,Value)
SELECT 'Grp1',2
UNION ALL SELECT 'Grp1',5
UNION ALL SELECT 'Grp1',3
UNION ALL SELECT 'Grp2',-5
UNION ALL SELECT 'Grp2',-2
UNION ALL SELECT 'Grp3',4
UNION ALL SELECT 'Grp3',0
UNION ALL SELECT 'Grp3',1
UNION ALL SELECT 'Grp4',-2
UNION ALL SELECT 'Grp4',-4
UNION ALL SELECT 'Grp5',7
UNION ALL SELECT 'Grp5',NULL
UNION ALL SELECT 'Grp6',NULL
UNION ALL SELECT 'Grp7',-1
UNION ALL SELECT 'Grp7',10
SELECT
GrpID,CASE
WHEN MinVal = 0 THEN 0
WHEN Neg % 2 = 1 THEN -1 * EXP(ABSMult)
ELSE EXP(ABSMult)
END
FROM
(
SELECT
GrpID,--log of +ve row values
SUM(LOG(ABS(NULLIF(Value,0)))) AS ABSMult,--count of -ve values. Even = +ve result.
SUM(SIGN(CASE WHEN Value < 0 THEN 1 ELSE 0 END)) AS Neg,--anything * zero = zero
MIN(ABS(Value)) AS MinVal
FROM
@foo
GROUP BY
GrpID
) foo (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
