2017-01-23 57 views
-1

我對如何寫出這個問題有疑問。對於一個人(傑克)和下面的總分不能超過1,總共顯示2.我將如何編寫一個案例陳述(或更好的選擇),我可以確保只計算某些行動總計達到1或總共只有1個。不同行的Case語句總和

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 

因此,例如,總傑克時,我總IT別處(EXCEL)將等於1的值,而不是2

我目前正試圖與出列臨時表數看,如果我滿足一定的要求,我會做這些的2 0.5 = 0

我只希望值是0.5或1

+1

請問您可以標記您正在使用的rdms(sql server,mysql,...)嗎? –

+0

計算總行數,並將行數除1?不確定你在問什麼?請提供您迄今爲止所嘗試的內容以及預期結果?每行的值都是0.5? – dadde

+0

這聽起來像你想有條件地計算某些行動,(如計數「吃」,而不是「睡眠」)。這是你的意思嗎?「能夠確保只計算總計達到1的某些動作」。你的語法讓你很難理解你想要什麼。 –

回答

0

這是你婉什麼T'

select Person, Date, Action, 
     Action/sum(action) over (partition by person) as p_action 
from t; 

將標準化值,每個名字,使他們全部加起來爲1

+0

不應該被分區? – ATC

+0

也許OP不希望標準化小於1的聚合體?就像行爲值爲0.5的單行一樣? – Arvo

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