不同行的案例陈述总和

时间:2017-01-23 23:23:39

标签: sql sql-server tsql

我有一个关于如何写出来的问题。一个人(杰克)的总积分不能超过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。

2 个答案:

答案 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