我有一个关于如何写出来的问题。一个人(杰克)的总积分不能超过1,这里显示总数为2.如何编写一个案例陈述(或更好的选项),我可以确保只计算某些行动总计达到1或一般只有1。
Person Date Action Value
Jack 1/1/16 Eat 0.5
Jack 1/2/16 Sleep 0.5
Jack 1/3/16 Walk 0.5
Jack 1/4/16 Sit 0.5
因此,例如,杰克在其他地方聚合时的总数(excel)将等于1而不是2。
我目前正在尝试使用行号查看临时表,如果我满足某些要求,我会将其中的2个设为0.5 = 0.
我只希望值为0.5或1。
答案 0 :(得分:0)
这是你想要的吗?
{{1}}
它会规范化每个名称的值,使它们总计为1。
答案 1 :(得分:0)
你可能正在寻找一些有条件的总和想法;在这里我编译了一些方法:
WITH Sample (Person, Date, Action, Value) AS
(
SELECT 'Jack', '1/1/16', 'Eat' , 0.5 UNION ALL
SELECT 'Jack', '1/2/16', 'Sleep', 0.5 UNION ALL
SELECT 'Jack', '1/3/16', 'Walk' , 0.5 UNION ALL
SELECT 'Jack', '1/4/16', 'Sit' , 0.5
)
SELECT Person,
-- plain sum
SUM(Value) PlainSum,
-- 1.0 will be the maximum value for this expression
CASE WHEN SUM(Value) > 1.00
THEN 1.00
ELSE SUM(Value)
END MaxOne,
-- here we can define different values for each action type
SUM(CASE
WHEN Action = 'Eat' THEN 0.25
WHEN Action = 'Sleep' THEN 0.00
WHEN Action = 'Walk' THEN 0.25
ELSE Value
END) CustomSum
FROM Sample
GROUP BY Person