Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    SQL UPDATE con CASE nel SET

    Ho provato a scrivere questo codice ma ho 3 domande.

    il codice dovrebbe decrementare (incrementare) il campo prezzo del valore 0.1 percentuale ma arrotondarlo in modo differente a seconda che il risultato sia < di 20.01, < 50.01 e cosi via..

    1) non funziona dove è l'errore?
    2) come faccio ad arrotondare un intero tipo: 101 -> 105 o 109->110
    3) CASE funziona anche su access (nel caso la risp fosse no, spiegatemi lo stesso la query sottostante che mi interessa in ogni caso)?

    codice:
    UPDATE oggetto 
    SET prezzo = 
    CASE WHEN (prezzo+prezzo*-0.1/100)<=20 THEN ROUND(prezzo+prezzo*-0.1/100,1)
    WHEN (prezzo+prezzo*-0.1/100)<=50 THEN CEILING(prezzo+prezzo*-0.1/100)
    ELSE (prezzo+prezzo*-0.1/100) END
    WHERE ID=10;
    Vi ringrazio anticipatamente.
    Rey
    La vita è un panaro, non sai mai quello che ti esce!
    photorealistic 3D rendering and animations and WEB Design

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333

    Re: SQL UPDATE con CASE nel SET

    Originariamente inviato da reybluk
    1) non funziona dove è l'errore?
    Il prezzo 15 è contemporaneamente < 20 e < di 50
    Quindi nella tua query ti prende la prima o la seconda condizione ?????

    Non conosco la funzione CEILING ( acc.... non finisco mai di imparare )
    ma ho capito che e una funzione testuale, Io resterei sul classico ROUND

    __________________________________________________ ______________


    Originariamente inviato da reybluk
    3) CASE funziona anche su access (nel caso la risp fosse no, spiegatemi lo stesso la query sottostante che mi interessa in ogni caso)?
    In Access si usa iif al posto di CASE
    ___ iif(prezzo < 20 ; "Minore" ; "Maggiore" )

    Ma tu devi fare questi conti in Access o SQL ?????
    ______ SQLServer ??????

    __________________________________________________ _______


    Originariamente inviato da reybluk
    2) come faccio ad arrotondare un intero tipo: 101 -> 105 o 109->110
    Questo è un po piu complicato,
    Facci prima sapere se si tratta di Access o SQLServer o cosaltro

    (
    Sostanzialmente se vuoi che i tuoi prezzi siano 100 - 105 - 110 - 115 - ecc
    devi:
    __ dividere il tuo prezzo per 5
    __ arrotondarlo con 0 decimali
    __ rimoltiplicare il risultato per 5
    )

    __________________________________________________ ___________


    La query qui sotto corrisponde alla tua un po rimaneggiata
    ( Vuoi applicare uno sconto dell'1% o dello 0.1% ??? )
    codice:
    UPDATE oggetto 
    SET prezzo = 
    CASE 
    WHEN (prezzo * (100 - 1) / 100) < 20 THEN (ROUND(prezzo * (100 - 1) / 100, 2)) 
    WHEN (prezzo * (100 - 1) / 100) BETWEEN 20 AND 50 THEN (ROUND(prezzo * (100 - 1) / 100, 1)) 
    WHEN (prezzo * (100 - 1) / 100) > 50 THEN (ROUND(prezzo * (100 - 1) / 100, 0)) 
    END 
    WHERE ID=10;
    ___ Minore di 20 arrotonda con 2 decimali
    ___ Fra 20 e 50 compresi arrotonda con 1 decimale
    ___ Maggiore di 50 arrotonda con 0 decimali



  3. #3
    mille grazie per la risposta.

    diciamo che uso access ma ci accedo da linguaggio asp usando query SQL.

    la funzione CEILING non so se esiste come SQL in access (infatti non mi funziona...) ma servirebbe ad arrotondare un numero 3,2 --> 4. Cioè sempre per eccesso

    Per quanto riguarda la percentuale si, mi serve calcolarla anche su valori piccoli come 0,1%
    Rey
    La vita è un panaro, non sai mai quello che ti esce!
    photorealistic 3D rendering and animations and WEB Design

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.