2017-06-05 43 views
0

我看過類似的問題,無法找到任何回答我的問題的東西。轉換爲顯示2個或更多組合列的總和的百分比

我有一列是其他列的計算,我想用一個集合數除以哪個總和,並以百分比顯示結果。我已經嘗試了下面的查詢,並能夠以十進制顯示。基本上找出一個員工在做UPH的比例是多少......這樣我就可以判斷他們是否在他們的部門工作,或者出色地工作。我使用150作爲我的基準利率

SELECT 
ID 
    , DeptCode AS 'DC' 
    , OpCode AS 'OC' 
    ,Units = sum(Units) 
    ,UPH = cast(isnull(sum(Units)/nullif(sum(datediff(minute,StartTime,FinishTime))*1.0,0),0.0)*60 as decimal(10,0)) 
    ,Percentage = cast(isnull(sum(Units)/nullif(sum(datediff(minute,StartTime,FinishTime))*1.0,0),0.0)*60 as decimal(10,0))/150 


FROM dbo.TimeLog 
WITH (NOLOCK) 

WHERE DeptCode = 'FB' 
    and OpCode = 'PU' 
    and Units IS NOT NULL 
GROUP BY 
    ID 
    , DeptCode 
    , OpCode 

這裏是我的結果...

ID  DC OC Units UPH Percentage 
11259 FB PU 553  114 0.760000 
2375935 FB PU 263  70 0.466666 

我希望看到列「比例」像下面

ID  DC OC Units UPH Percentage 
11259 FB PU 553  114 76% 
2375935 FB PU 263  70 47% 

任何幫助將不勝感激,如果這對你來說很基本,我會提前致歉。我對SQL比較陌生

回答

1

試試這個代替(SQL 2012及以後):

百分比= CONCAT(鑄造(ISNULL(總和(單位)/ NULLIF(總和(DATEDIFF(分鐘,開始時間,FinishTime))* 1.0,0),0.0) * 60 十進制(10,0)), '%')

參見:https://docs.microsoft.com/en-us/sql/t-sql/functions/concat-transact-sql

試試這個(SQL 2008):

(轉換(VARCHAR,投( (isnull(sum(Units)/ 0.010)* 60)/ 150 * 100(十進制)(10,0)))+'%')百分比

參見:https://docs.microsoft.com/en-us/sql/t-sql/language-elements/string-concatenation-transact-sql

+0

您好,我只是去嘗試....消息195,級別15,狀態10,第26行 'CONCAT'不是公認的內置函數名稱。運行SQL 2008R2 – DRUIDRUID

+0

跑了第二個得到了這個錯誤代碼。 Msg 8114,級別16,狀態5,行17 將數據類型varchar轉換爲數字時出錯。 – DRUIDRUID

+0

嘗試前面提到的查詢現在 –

0

您可以使用格式(十進制, 'p')如下:

 ,Percentage = Format(cast(isnull(sum(Units)/nullif(sum(datediff(minute,StartTime,FinishTime))*1.0,0),0.0)*60 as decimal(10,0))/100 , 'p') 
+0

這不適合我我收到一個錯誤 – DRUIDRUID

+0

你正在得到什麼錯誤? –

+0

'格式'不是公認的內置函數名稱。我正在運行2008R2 – DRUIDRUID