"Nico Williams" wrote...

> On Fri, Jun 17, 2011 at 5:05 PM, Mr. Puneet Kishor <punk.k...@gmail.com> 
> wrote:
>> The above is not SQL. You can't have a SQL statement begin with CASE. SQL 
>> statements can only begin with either SELECT or UPDATE or CREATE or 
>> DELETE or ALTER, etc. CASE is an expression, and has to be a replacement 
>> for a column. I can't even begin to help you rewrite your statement, but 
>> what you are trying to accomplish is something like --
>>
>> if (some condition)
>> UPDATE this
>> else
>> UPDATE that
>>
>> Either accomplish the above in a programming language, or rewrite it as 
>> separate queries, or hope Igor or someone can help you rewrite the above 
>> into a single query.
>
> Rewrite the statements as:
>
> INSERT ... WHERE ... AND <some condition>;
>
> Similarly for SELECT, UPDATE, and DELETE.
>

I have rewritten the code:

BEGIN IMMEDIATE TRANSACTION;

UPDATE LSOpenJobs SET ProjFund = (SELECT round(sum(ProjFund) * .10,2) FROM 
LSOpenJobs
WHERE subProjID = 9144 AND lang = 'ES-LA'
AND PSubClass != 'PM' AND PSubClass != 'Rush-Job'),
Xtra8 = (SELECT round(sum(Xtra8) * .10,2) FROM LSOpenJobs
WHERE subProjID = 9144 AND lang = 'ES-LA'
AND PSubClass != 'PM'
AND PSubClass != 'Portal-Fee'
AND PSubClass != 'Rush-Job'),
Xtra6 = '10% of total',
XtraB = '2011-06-19 18:02:16'
WHERE subProjID = 9144 AND lang = 'ES-LA'
AND XtraD = '10%' AND PSubClass = 'PM' AND PSubClass != 'Rush-Job';

  UPDATE LSOpenJobs SET ProjFund =
    CASE PSubClass
    WHEN 'Portal-Fee' THEN
      CASE SELECT round(sum(Xtra8),2) FROM LSOpenJobs
           WHERE subProjID = 9144 AND lang = 'ES-LA'
                 AND PSubClass != 'Portal-Fee'
      WHEN < 5000 THEN
        SELECT round(sum(ProjFund) * .0175,2) FROM LSOpenJobs
          WHERE subProjID = 9144 AND lang = 'ES-LA'
          AND PSubClass != 'Portal-Fee'
      WHEN BETWEEN 5000 AND 20000 THEN
        SELECT round(sum(ProjFund) * .0125,2) FROM LSOpenJobs
          WHERE subProjID = 9144 AND lang = 'ES-LA'
          AND PSubClass != 'Portal-Fee'
      ELSE
        0.0
      END
    END;
COMMIT TRANSACTION;

This is what I get when I run that code:

sqlite>
sqlite> BEGIN IMMEDIATE TRANSACTION;
sqlite>
sqlite> UPDATE LSOpenJobs SET ProjFund = (SELECT round(sum(ProjFund) * 
.10,2) FR
OM LSOpenJobs
   ...> WHERE subProjID = 9144 AND lang = 'ES-LA'
   ...> AND PSubClass != 'PM' AND PSubClass != 'Rush-Job'),
   ...> Xtra8 = (SELECT round(sum(Xtra8) * .10,2) FROM LSOpenJobs
   ...> WHERE subProjID = 9144 AND lang = 'ES-LA'
   ...> AND PSubClass != 'PM'
   ...> AND PSubClass != 'Portal-Fee'
   ...> AND PSubClass != 'Rush-Job'),
   ...> Xtra6 = '10% of total',
   ...> XtraB = '2011-06-19 18:02:16'
   ...> WHERE subProjID = 9144 AND lang = 'ES-LA'
   ...> AND XtraD = '10%' AND PSubClass = 'PM' AND PSubClass != 'Rush-Job';
sqlite>
sqlite>   UPDATE LSOpenJobs SET ProjFund =
   ...>     CASE PSubClass
   ...>     WHEN 'Portal-Fee' THEN
   ...>       CASE SELECT round(sum(Xtra8),2) FROM LSOpenJobs
   ...>            WHERE subProjID = 9144 AND lang = 'ES-LA'
   ...>                  AND PSubClass != 'Portal-Fee'
   ...>       WHEN < 5000 THEN
   ...>         SELECT round(sum(ProjFund) * .0175,2) FROM LSOpenJobs
   ...>           WHERE subProjID = 9144 AND lang = 'ES-LA'
   ...>           AND PSubClass != 'Portal-Fee'
   ...>       WHEN BETWEEN 5000 AND 20000 THEN
   ...>         SELECT round(sum(ProjFund) * .0125,2) FROM LSOpenJobs
   ...>           WHERE subProjID = 9144 AND lang = 'ES-LA'
   ...>           AND PSubClass != 'Portal-Fee'
   ...>       ELSE
   ...>         0.0
   ...>       END
   ...>     END;
Error: near "SELECT": syntax error
sqlite> COMMIT TRANSACTION;
sqlite>

I am trying to hit two things in one shot.  Here is the idea, if a project 
has a Portal-Fee charge, then if the total of Xtra8 is < 5000, the ProjFund 
portal fee is 1.75% of the ProjFund, if >= 5000, but less then 20000, then 
1.25%, otherwise Portal-Fee is 0.

I know how to do it programmatically, but, I would like to do it all within 
the SQL call.  If possible...

Thanks,

jose 

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to