2013-05-17 4 views
0

Je rencontre un problème lors de l'utilisation de l'instruction CASE plusieurs fois dans une requête sql dans PYTHON. Je me demande si je peux supprimer l'instruction CASE et créer un modèle, puis je peux replacer le paramètre template dans la requête d'origine. Comme ceci:Python, insérez une instruction case dans une requête sql

case_stm_template = 
    crs.execute(""" 
     CASE 
      WHEN level_1 = 'Corporate' 
      THEN 
       CASE 
        WHEN ssr.rating = 'A' OR ssr.rating LIKE 'A[+-]' 
        THEN 'Corp A' 

        WHEN ssr.rating = 'AA' OR ssr.rating LIKE 'AA[+-]' 
        THEN 'Corp AA' 

        WHEN ssr.rating = 'BBB' OR ssr.rating LIKE 'BBB[+-]' 
        THEN 'Corp BBB' 

        ELSE NULL 
       END 

      WHEN level_1 = 'Government' AND level_2 = 'Provincial' 
      THEN 'Prov' 

      WHEN level_1 = 'Government' AND level_2 = 'Federal' 
      THEN 'Canada' 

      ELSE NULL 
     END 

     """) 

mettre cela en

crs.execute(""" 
    SELECT 
     ... 
     case_stm_template, 
     SUM(...) 
    FROM .... 
    WHERE .... 
    GROUP BY 
     case_stm_template 
""".format(...)) 

Cela ne fonctionne pas. Quelqu'un peut-il m'aider? THX!!!

Répondre

0

Qu'en est-:

case_stm_template=""" 
    CASE 
     WHEN level_1 = 'Corporate' 
     THEN 
      CASE 
       WHEN ssr.rating = 'A' OR ssr.rating LIKE 'A[+-]' 
       THEN 'Corp A' 

       WHEN ssr.rating = 'AA' OR ssr.rating LIKE 'AA[+-]' 
       THEN 'Corp AA' 

       WHEN ssr.rating = 'BBB' OR ssr.rating LIKE 'BBB[+-]' 
       THEN 'Corp BBB' 

       ELSE NULL 
      END 

     WHEN level_1 = 'Government' AND level_2 = 'Provincial' 
     THEN 'Prov' 

     WHEN level_1 = 'Government' AND level_2 = 'Federal' 
     THEN 'Canada' 

     ELSE NULL 
    END 

    """ 

puis

crs.execute(""" 
SELECT 
    ... 
    %s, 
    SUM(...) 
FROM .... 
WHERE .... 
GROUP BY 
    %s 
""" % (case_stm_template, case_stm_template)) 

Ou quelque chose dans ce sens.

Questions connexes