擅长:python、mysql、java
<p>在进行数值比较之前,您需要<code>CAST()</code>,否则SQL Server会比较字符串而不是数字,这会导致意外的结果:例如,在字符串方面,<code>'2'</code>大于<code>'12'</code>(因为它以<code>'2'</code>开头,大于<code>'1'</code>),这对于查询(<code>Size</code>中涉及的所有数值比较都是如此(也令人担忧)</p>
<p>我建议使用<code>TRY_CAST()</code>,这样可以避免错误,并在转换失败时返回<code>null</code>(这将有效地使条件失败,并从查询中删除相应的行)</p>
<p>此外,子查询是不必要的</p>
<p>考虑:</p>
<pre><code>SELECT SUM(Qty) Qty
FROM SalesData
WHERE
Stage = 'WIP'
AND PackedOn >= '2018-06-03'
AND PackedOn <= '2020-06-03'
AND Brand = 'ABC'
AND ProductLine = 'DEF'
AND ProdType Is Null
AND Qty >= 12
AND TRY_CAST(Strength AS DECIMAL(10, 4)) >= 0.2
AND TRY_CAST(Strength AS DECIMAL(10, 4)) <= 0.4
AND TRY_CAST(Size AS INT) = 15
</code></pre>
<p>如果要将<code>float</code>输出强制转换为<code>decimal</code>,则在<code>sum()</code>之后更准确,因此:</p>
<pre><code>SELECT CAST(SUM(Qty) AS DECIMAL(10, 2)) Qty
FROM ...
</code></pre>