case 查询时将 nvarchar 转换为数据类型 numeric 的算术溢出错误

Arithmetic overflow error converting nvarchar to data type numeric in case query

我试图显示在一个时间范围内赢得的报价数量占报价总数的百分比。 例如。我总共有 294 个报价,其中 173 个被赢得。我要找的结果是 59%。

我有以下查询,但它返回错误:

Arithmetic overflow error converting nvarchar to data type numeric

SELECT 
    COUNT(dbo.Quotes.qmpQuoteID *
    CASE WHEN dbo.QuoteLines.qmlResolutionReasonID = 'WON' THEN 100
    ELSE 0.0 END) As WonRate
FROM dbo.Quotes
LEFT OUTER JOIN dbo.QuoteLines on dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID 
LEFT OUTER JOIN dbo.Reasons ON dbo.QuoteLines.qmlResolutionReasonID = dbo.Reasons.xarReasonID
WHERE uqmpDateSent >= DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()) -3,0)
AND uqmpDateSent < DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0)
AND dbo.Quotes.UQMPCANCELLED = 0
AND dbo.QuoteLines.qmlResolutionReasonID != 'PROFO'
AND dbo.QuoteLines.qmlResolutionReasonID != 'SMSRQ'
AND dbo.QuoteLines.qmlResolutionReasonID != 'OPTIO' 
AND dbo.QuoteLines.qmlResolutionReasonID != 'PRICE'
AND dbo.QuoteLines.qmlResolutionReasonID <> ''

尝试

SELECT 

    WonRate = SUM(Q.qmpQuoteID * (CASE WHEN L.qmlResolutionReasonID = <See Note 1> THEN 100 ELSE 0 END))

FROM            dbo.Quotes      Q
    LEFT JOIN   dbo.QuoteLines  L   ON  L.qmpQuoteID    =   Q.qmlQuoteID 
    LEFT JOIN   dbo.Reasons     R   ON  R.xarReasonID   =   L.qmlResolutionReasonID
    
WHERE   uqmpDateSent    >=  DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()) -3,0)
    AND uqmpDateSent    <   DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0)
    AND Q.UQMPCANCELLED = 0
    AND L.qmlResolutionReasonID NOT IN ('PROFO', 'SMSRQ', 'OPTIO', 'PRICE', '')

--Note 1: I think you need to put here the ReasonID value for the Reason Description = 'WON'