2017-01-26 8 views
0

私はポストへのフォローアップの質問を先にお願いしています。 (SQL: Overflow error for type INT)。私が今問題を抱えているのは、@ SUMX2Yと@ SUMX2X2の結果をFLOATに変換することです。私は複数の異なる方法を試して、まだ問題がある。誰も私がここで間違っていることのアイデアを持っていますか?私は自分のコンバージョンの試みは含めませんでしたが、CASTとCONVERTをそれぞれの方程式のレベルまで含めました。SQL分割時のINT結果の丸め

CREATE TABLE #Set1 
(
    X BIGINT, 
    Y BIGINT 
) 
INSERT INTO #Set1 
VALUES (220, 630) 
     ,(350, 940) 
     ,(450, 1140) 


DECLARE @SUMX BIGINT 
DECLARE @SUMY BIGINT 
DECLARE @SUMX2 BIGINT 
DECLARE @SUMY2 BIGINT 
DECLARE @SUMX3 BIGINT 
DECLARE @SUMX4 BIGINT 
DECLARE @SUMXX BIGINT 
DECLARE @SUMXY_ BIGINT 
DECLARE @SUMXY BIGINT 
DECLARE @SUMXX2 BIGINT 
DECLARE @SUMX2Y BIGINT 
DECLARE @SUMX2Y_ BIGINT 
DECLARE @SUMX2X2 BIGINT 
DECLARE @N INT 

    SET @N = (SELECT COUNT(*) FROM #Set1) 
    SET @SUMY = (SELECT SUM(Y) FROM #Set1) 
    SET @SUMX2 = (SELECT SUM(POWER(X,2)) FROM #Set1) 
    SET @SUMX4 = (SELECT SUM(POWER(X,4)) FROM #Set1) 

    SET @SUMX2Y_ = (SELECT SUM(POWER(X,2)*Y) FROM #Set1) 

    SET @SUMX2Y = @SUMX2Y_ - (@SUMX2*@SUMY)/(@N) 
    SET @SUMX2X2 = @SUMX4 - (POWER(@SUMX2,2)/@N) 

    PRINT @SUMX2Y 
    PRINT @SUMX2X2 

答えて

0

BIGINTをFLOATに変更しました。私はそれが問題の原因となる道がわからないと確信しています。 we'll see

0

NUMERIC(18,2)または保持する精度を使用します。あなたが明示的に小数点以下の値

コードの下

に合格するまで、これは小数精度の値を維持するフロートを使用して、あなたはフロート&数値の違いのためのスクリプト以下

CREATE TABLE #Set1 
(
    X NUMERIC(18,2), 
    Y NUMERIC(18,2) 
) 
INSERT INTO #Set1 
VALUES (220, 630) 
     ,(350, 940) 
     ,(450, 1140) 


DECLARE @SUMX NUMERIC(18,2) 
DECLARE @SUMY NUMERIC(18,2) 
DECLARE @SUMX2 NUMERIC(18,2) 
DECLARE @SUMY2 NUMERIC(18,2) 
DECLARE @SUMX3 NUMERIC(18,2) 
DECLARE @SUMX4 NUMERIC(18,2) 
DECLARE @SUMXX NUMERIC(18,2) 
DECLARE @SUMXY_ NUMERIC(18,2) 
DECLARE @SUMXY NUMERIC(18,2) 
DECLARE @SUMXX2 NUMERIC(18,2) 
DECLARE @SUMX2Y NUMERIC(18,2) 
DECLARE @SUMX2Y_ NUMERIC(18,2) 
DECLARE @SUMX2X2 NUMERIC(18,2) 
DECLARE @N NUMERIC(18,2) 

    SET @N = (SELECT COUNT(*) FROM #Set1) 
    SET @SUMY = (SELECT SUM(Y) FROM #Set1) 
    SET @SUMX2 = (SELECT SUM(POWER(X,2)) FROM #Set1) 
    SET @SUMX4 = (SELECT SUM(POWER(X,4)) FROM #Set1) 

    SET @SUMX2Y_ = (SELECT SUM(POWER(X,2)*Y) FROM #Set1) 

    SET @SUMX2Y = @SUMX2Y_ - (@SUMX2*@SUMY)/(@N) 
    SET @SUMX2X2 = @SUMX4 - (POWER(@SUMX2,2)/@N) 

    PRINT @SUMX2Y 
    PRINT @SUMX2X2 

使用を使用することができます

DECLARE @SUMX NUMERIC(18,2) = 100 

DECLARE @SUMX1 FLOAT = 100 

SELECT @SUMX,@SUMX1 
関連する問題