回答

收藏

此SQL Server查询除法计算有什么问题?

技术问答 技术问答 331 人阅读 | 0 人回复 | 2023-09-13

我在SQL Server 2008 R2数据库上具有以下表结构:7 D& D, m& K# @( P
  CREATE TABLE FormTest
/ p  g! Y6 r" u( V4 ](   # r% E' @9 G2 ]- u) p4 i
clientid char(10)," w3 V! y) O5 A9 Y
DateSelected date,! ~4 ?! q1 w+ Z
A int,$ r* T; N. }# i" N6 k
B int,- I2 L4 b* H& {  h
C int9 u$ q/ v  f2 m1 ^6 w1 K
)
6 h2 b2 L. u( j. j' e+ F8 I5 g2 U7 r我在表格FormTest中填写了以下信息
  S! O" H* ]0 u+ V% U' _" J, dclientid        DateSelected      A       B     C
( y( v% d/ m* Bx1              2006-06-09     65150    4921    1" E( {. F/ g: Q9 D  V  O
x2              2006-05-05     155926   69092   1
! \! w5 t! F4 X) U1 [+ l, ]x3              2006-01-20     95603    156892  1, w/ N% b9 X) t; o0 N. `
x4              2006-01-20     30704    164741  1
- c5 I. W& H" D% Z( Ox4              2006-02-03     65150    174834  10 S2 C$ a4 L% u; Q% j: Y5 n
x5              2006-04-28     59629    4921    1
- F3 m; f# P! ]* b8 ]# |0 J- ?x6              2006-01-27     30704    162356  1
, h3 F* l# {; P% _, i6 dx7              2006-06-30     65150    4921    1
9 H1 W8 O' w( @x8              2006-07-10     65150    4921    1% S% }; u" p/ _: J+ [
最后,我运行此sql查询:1 A" p* |  x# K) V+ {1 Y
SELECT clientid, (((a+ b + c) / 3) / 216647 * 10) AS Formula1 8 D& l2 y$ p7 ?* Y( {) M, M9 m. C
    From FormTest$ I7 P2 k& h( {& U' P
但是后来我得到了这些结果:
* J) ^4 W4 B/ t5 {! l8 j3 @3 Fclientid        Formula1      
+ P  |6 v7 i  M  @x1              0
/ x4 ?+ a" I) D$ \8 r% dx2              03 L" Q" y3 |/ N9 _# x! F! k
x3              0! n1 Y/ Q: L% j+ V& m* A" S) o: u: F
x4              0
7 {% q# p5 z# Q- j' W% Y/ Fx4              0
& e" I+ a& E$ Z' h% tx5              0! b5 V/ O# a' A3 K& @7 j
x6              0: A4 e* _5 e0 E1 z' M  ]
x7              0* S5 a# b2 v* e( \% \+ I* ~  I
x8              0
1 l6 e8 z+ S/ m有人可以告诉我我在做什么错吗?
7 D, j0 X' o: E# [; p2 j' f9 r                + M) S/ v6 c. T" P/ f
解决方案:
  f. `+ D$ \- ~" c. Z                + T- h, L) |+ u4 D( r0 C$ c

) T# U, v, ]* ~
- J( W2 D: t' U9 C& W9 G6 p' G  \                这是因为您正在执行整数除法。您应使用以下方法将其中一个操作数转换为浮点数或十进制(取决于您进行的计算的精度和目的):9 m; ?9 e% F  `: w) L3 S
((CAST((a+ b + c) AS FLOAT) / 3) / 216647 * 10)2 R  R% B% [' _/ ~
或可能:
8 s* ]& X" E/ s; j% Z$ i0 U(((a+ b + c) / 3.0) / 216647.0 * 10)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则