Ya know, if you ever wanted to deviate from the SQL standard, a handy
upgrade to the CASE statement would permit split conditions on the case and
when statement, as in:

Case price1
   when > 12 then 1
   when > 30 then 2
   else 0
end

dvn

On Thu, Mar 1, 2012 at 12:43 PM, Don V Nielsen <donvniel...@gmail.com>wrote:

> I think Simon's solution is in error, and Igor's is correct.  In Simon's
> case, Slevel will be set to 1 if price1 is greater than 30.  However, the
> original c function would set Slevel to 2 because price1 is greater than 12
> and it is greater than 30.  Two increments of i are executed in that
> scenario.  Igor's accumulating the boolean results gets you where you want
> to be; it's just a little cryptic.
>
> The original function was less than explicit.  I'm assuming some kind of
> weighted value is being generated.  My solution is probably the most wordy
> and least efficient performance wise, it is explicit in function.  It also
> allows you to set the weight of each price1/price2 level.
>
> UPDATE bb SET Slevel =
> (
>   (Case when price1>12 then 1
>         when price1>20 then 2
>         else 0
>    End) +
>   (Case when price2>20 then 1
>         when price2>30 then 2
>         when price2>80 then 3
>         else 0
>    End)
> );
>
>
> On Thu, Mar 1, 2012 at 7:21 AM, Igor Tandetnik <itandet...@mvps.org>wrote:
>
>> YAN HONG YE <yanhong...@mpsa.com> wrote:
>> > I have a sqlite database named bb:
>> >
>> >> Name    Price1    Price2    Slevel
>> >> A1        23             231          NULL
>> >> A2        22            12             NULL
>> >> A3       21            223           NULL
>> >
>> > My question is:
>> > I want to update culumn Slevel by function myfunc():
>> >
>> > int myfunc():
>> > {int i=0;
>> > if (price1 >12)
>> > i++;
>> > if (price1>30)
>> > i++;
>> > if (price2>20)
>> > i++;
>> > if (price2>30)
>> > i++;
>> > if (price2>80)
>> > i++;
>> > return i;
>> > }
>>
>> Just run this query:
>>
>> update bb set Slevel = (price1>12) + (price1>30) + (price2>20) +
>> (price2>30) + (price2>80);
>>
>> --
>> Igor Tandetnik
>>
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users@sqlite.org
>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>>
>
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to