我正在努力解决这个特定的Access 2010 SQL查询已经有一段时间了。让我先告诉你我的桌子是什么样的:
customerID value
123456789 100
123456789 -100
123456789 300
123456789 -300
123456789 150
123456789 -150
123456789 200
123456789 200
987654321 500
987654321 -500
987654321 200
987654321 -200
987654321 210
987654321 210
您看到我有一个带有多个值的customerID的多个条目。这些值可以是正面的和负面的。负值表示更正,因此相应的正值“变为零”。
我现在需要查询的是每个customerID的所有最大值的最大值。在上面的示例中,customerID 123456789的最大值为200,因为此customerID上的所有其他值均相互消除。因此,customerID 987654321上的最大值为210。
最终,我的查询应该返回210的值,作为每个customerID的所有最大值中的最大值,这些值不会被负值校正/取消。
你能帮我解决这个问题吗?
编辑:向两个customerID添加(重复)值200和210,以明确SUM()在这里不起作用。
编辑#2:这是一些(几乎)现实生活中的数据:http://pastebin.com/TbNRTw5A
答案 0 :(得分:1)
我不知道这是否是你的答案,只是假设所有负值都有1个相应的相等正值配对。
SELECT CustomerID, SUM(Stack1.Value) FROM Stack1
GROUP BY CustomerID
结果将是:
CustomerID Value
123456789 200
987654321 210
希望这有帮助
这个怎么样?
WITH tmpPositive AS (SELECT
Stack1.CustomerID, Stack1.Value FROM Stack1 WHERE Stack1.Value > 0),
tmpNegative AS (SELECT
Stack1.CustomerID, Stack1.Value FROM Stack1 WHERE Stack1.Value < 0)
SELECT tmpPositive.CustomerID, MAX(tmpPositive.Value) AS MaxValue FROM tmpPositive
LEFT OUTER JOIN tmpNegative
ON tmpPositive.CustomerID = tmpNegative.CustomerID AND
-tmpPositive.Value = tmpNegative.Value
WHERE tmpNegative.CustomerID IS NULL
GROUP BY tmpPositive.CustomerID;
这是测试数据:
CustomerID Value
---------------------
123456789 100
123456789 -100
123456789 300
123456789 -300
123456789 150
123456789 -150
123456789 200
987654321 500
987654321 -500
987654321 200
987654321 -200
987654321 210
123456789 200
123456789 110
987654321 1250
我上面查询的结果。
CustomerID MaxValue
--------------------
123456789 200
987654321 1250