Sql 操作数数据类型varchar(max)对于avg运算符无效

Sql 操作数数据类型varchar(max)对于avg运算符无效,sql,sql-server,sqldatatypes,Sql,Sql Server,Sqldatatypes,有人能帮我解决这个错误吗 SELECT a.id, a.name, a.Report, b.Agentid, count(distinct b.pyID), count(distinct b.SourceID), AVG(b.ChatDurationMinute) from table_1 a left join table_b b on a.id = b.agentid where StartChatTime >= ''20200701''

有人能帮我解决这个错误吗

SELECT 
   a.id, a.name, a.Report, b.Agentid, 
   count(distinct b.pyID), 
   count(distinct b.SourceID), 
   AVG(b.ChatDurationMinute) 
from table_1 a 
left join table_b b on a.id = b.agentid 
where 
   StartChatTime >= ''20200701'' and 
   LastChatTime <= ''20200831''  
GROUP BY a.id, a.name, a.Report, b.AgentID
选择
a、 id,a.姓名,a.报告,b.代理,
计数(不同的b.pyID),
计数(不同的b.SourceID),
平均值(b.持续时间分钟)
来自表1 a
a.id=b.agentid上的左联接表
哪里
StartChatTime>=“20200701”和

LastChatTimeChatDurationMinute列的数据类型似乎是varchar,所以需要对其进行转换

SELECT 
   a.id, a.name, a.Report, b.Agentid, 
   count(distinct b.pyID), 
   count(distinct b.SourceID), 
   AVG(cast(b.ChatDurationMinute as float)) 
from table_1 a 
left join table_b b on a.id = b.agentid 
where 
   StartChatTime >= ''20200701'' and 
   LastChatTime <= ''20200831''  
GROUP BY a.id, a.name, a.Report, b.AgentID
选择
a、 id,a.姓名,a.报告,b.代理,
计数(不同的b.pyID),
计数(不同的b.SourceID),
平均值(铸造(b.ChatDurationMinute为浮动))
来自表1 a
a.id=b.agentid上的左联接表
哪里
StartChatTime>=“20200701”和

LastChatTime根据查询中的命名约定,假设
StartChatTime
LastChatTime
位于
b
而不是
a
,这是非常合理的。如果是这样,那么
WHERE
子句将
左连接
转换为
内部连接

此外,将
b.AgentId
包含在
groupby
中是多余的,因为
ON
子句指定它应该与
a.id
相同

将数字存储在字符串中是一种糟糕的设计。但是,如果您被一个糟糕的设计所困扰,您可能应该使用
try\uz()
函数之一

让我假设
ChatDurationMinute
是一个整数。然后:

SELECT a.id, a.name, a.Report
       COUNT(DISTINCT b.pyID), 
       COUNT(DISTINCT b.SourceID), 
       AVG(TRY_CONVERT(int, b.ChatDurationMinute) * 1.0)
FROM table_1 a LEFT JOIN
     table_b b 
     ON a.id = b.agentid AND
        b.StartChatTime >= '20200701'' AND 
        b.LastChatTime <= '20200831'  
GROUP BY a.id, a.name, a.Report;
选择a.id、a.name、a.Report
计数(不同的b.pyID),
计数(不同的b.SourceID),
平均值(尝试转换(整数,b.ChatDurationMinute)*1.0)
从表1到左联接
表b
在a.id=b.agentid和
b、 StartChatTime>=“20200701”和

b、 LastChatTime正确的解决方案是将数字存储在数字数据类型中…为什么要将数字存储在
varchar
列中?你不应该这样做这和你之前的问题差不多。。。你已经得到了答案。。。关于将varchar转换为numeric以及处理由于使用不正确的数据类型而出现的问题,您还不了解什么?这是否回答了您的问题?我完成了转换为float,但得到如下错误:将数据类型varchar转换为float时出错。@NamedJustin这与前面的问题的原因相同,一些数据不会自然地转换为数字类型。如果需要进一步帮助,您需要发布一些示例数据。