我有一个复杂的存储过程,它使用数值计算列,并将其作为包含其他列的数据集的一部分返回。我试图找到一种方法在同一个查询中返回该特殊列的SUM。我使用SQL Management Studio,并考虑使用OUT参数甚至RETURN值。但如果有更多的SQL-ish方法,那肯定会更喜欢它。
SELECT
OrID, QN, PRID, PCKID, Person, Price, CSID,
CASE
WHEN (COUNT(*) OVER (PARTITION BY OrID)) > 1
THEN Price * 0.2
ELSE Price * 0.1
END AS Commission
FROM
( < my subquery > )
我还想将SUM(Commission)
添加到上述声明的结果中。
如果我的数据是(部分)
OrID|Price
----+-----
1 | 100
2 | 100
2 | 50
3 | 80
我将得到以下结果
OrID|Price|Commission
----+-----+----------
1 | 100 | 10
2 | 100 | 20
2 | 50 | 10
3 | 80 | 8
在某个地方,我也希望看到最后一栏的总和 - 48
像SUM
列
Commission
函数
答案 0 :(得分:1)
您可以使用子查询:
SELECT s.*, SUM(Commission) OVER (PARTITION BY OrId) as sum_commission
FROM (SELECT OrID, QN, PRID, PCKID, Person, Price, CSID
(CASE WHEN (count(*) OVER (PARTITION BY OrID)) > 1
THEN Price*0.2
ELSE Price*0.1
END) AS Commission
FROM (< my subquery >
) s
) s;
我假设你想要OrId
。如果不删除partition by
。
答案 1 :(得分:0)
尝试使用with Rollup命令。它做你想要的 https://technet.microsoft.com/en-us/library/ms189305%28v=sql.90%29.aspx?f=255&MSPPError=-2147217396