2016-10-26 1 views
1

Ich habe zwei TabellenSQL Server gespeicherte Prozedur wird ein falsches Mittel pro Zustand Berechnung

Funddetails:

FundId Fund Industry State Column1 
----------------------------------------- 
    1  1  2  NSW    
    2  1  2  ACT   
    3  1  2  VIC   
    4  1  2  NSW   
    5  1  2  ACT   
    6  1  2  VIC   
    7  1  2  NSW   
    8  1  2  ACT   
    9  1  2  VIC  

Industrydetail:

IndustryId price State 
----------------------- 
    1   12 NSW 
    2   1 Vic 
    3   3 ACT 

Dies ist, wie ich Spalte am Aktualisierung 1

UPDATE FundDetails 
SET Column1 = CASE 
       WHEN (funddetails.Industry * Industrydetails.price - 
         (select Avg(funddetails.Industry * Industrydetails.price) OVER (partition BY Industrydetails.state)) <= -5 
        THEN '50' 
        ELSE '100' 
       END 
FROM FundDetails 
INNER JOIN Industrydetails ON FundDetails.State = Industrydetails.State 

Aber die durchschnittliche Berechnung gibt ein falsches Ergebnis.

funddetails.Industry*Industrydetails.price und (select Avg(funddetails.Industry*Industrydetails.price) OVER (partition BY Industrydetails.state)) sind die gleichen Ergebnisse.

Gibt es eine andere Möglichkeit, die

average(funddetails.Industry * Industrydetails.price) 

pro Zustand und aktualisieren Sie die Spalte

+0

FWIW: AVG (INT) -> INT. – user2864740

+0

Entschuldigung, was ist das? –

+0

Wie ist die Durchschnittsberechnung falsch? – ZLK

Antwort

1
;WITH AvgIndustryPrice (State, AverageIndustryPrice) AS 
(
    SELECT 
     FundDetails.State, 
     AVG (FundDetails.Industry * IndustryDetail.Price) 
    FROM 
     FundDetails 
    JOIN 
     IndustryDetail 
    ON 
     FundDetails.State = IndustryDetail.State 
    GROUP BY 
     FundDetails.State 
) 
UPDATE 
    FundDetails 
SET 
    Column1 = 
    CASE 
     WHEN funddetails.Industry * Industrydetails.price - AvgIndustryPrice.AverageIndustryPrice <= -5 
     THEN '50' 
     ELSE '100' 
    END 
FROM 
    FundDetails 
JOIN 
    AvgIndustryPrice 
ON 
    FundDetails.State = AvgIndustryPrice.State 
0

Ich denke, Ihre Abfrage gibt richtige Antwort zu bekommen. Sie haben die Daten in der Tabelle so hinzugefügt, dass sich für beide (funddetails.Industry * Branchendetails.price) und AVG (FundDetails.Industry * IndustryDetail.Price) das gleiche Ergebnis ergibt.

Verwandte Themen