2017-06-05 47 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