Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: MSSQL: Viallisille riveille keskiarvo oikeista riveistä

Jaska [19.05.2017 15:50:55]

#

Onkohan tällainen helppo tehdä MSSQL:llä? Mulla on annettu taulu ja siinä varchar-kenttä. Siinä pitäisi olla kokonaislukuja annetusta väliltä, mutta aineistossa on virheitä, jolloin osa datasta on jotain muuta. Nyt haluaisin approksimoida näitä varmasti virheellisiä oikealta näyttävien keskiarvolla ja päivittää virheelliset arvot. Approksimatio saa olla desimaaliluku, kun haluan tietää, miltä datasta laskettu suure näyttäisi korvaamalla virheelliset keskiarvolla.

Grez [19.05.2017 21:39:08]

#

No ihan äkkiseltään päästä heittämällä esim. näin. (Syntaksivirheitä ja ajatusvirheitä voi olla)

UPDATE [Taulu]
SET [Arvo]=(
  SELECT AVG(CAST([Arvo] AS NUMERIC(20,5)))
  FROM Taulu
  WHERE ISNUMERIC([Arvo])
)
WHERE NOT ISNUMERIC([Arvo])

Jaska [22.05.2017 10:30:58]

#

Hmm. Ei tuo vissiin toimi ihan suoraan. Ainakin ISNUMERIC-testi pitää olla muodossa ISNUMERIC(ky1)=1. Sain tuon keskiarvon laskettua. Laskettu keskiarvo pitäisi vielä heittää sopivalla updatella riveihin, joissa on varmasti väärä arvo.

SELECT AVG(CAST(ky1 AS FLOAT)) FROM esimerkkikysely
WHERE ky1 IN ('1','2','3','4','5','6','7')

Stackoverflowsta tuli vinkki (https://stackoverflow.com/questions/44106205/update-wrong-data-to-the-average-of-a-table):

UPDATE esimerkkikysely
SET    KY2 = CASE WHEN LTRIM(RTRIM(KY1)) IN ('1','2','3','4','5','6','7')
                 THEN CONVERT(FLOAT, KY1)
             ELSE (SELECT AVG(CONVERT(FLOAT, KY1))
                   FROM   esimerkkikysely e
                   WHERE  LTRIM(RTRIM(KY1)) IN ('1','2','3','4','5','6','7'))
WHERE  LTRIM(RTRIM(KY1)) NOT IN ('1','2','3','4','5','6','7')

Tämä kuitenkin palautti virheen:

Msg 156, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'WHERE'.

Metabolix [18.06.2017 23:46:05]

#

CASE-rakenteen lopusta (eli ennen jälkimmäistä WHERE-sanaa) puuttuu END.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta