简体   繁体   English

Python,在SQL查询中插入case语句

[英]Python, insert a case statement into a sql query

I am having a problem on using the CASE statement multiple times in a sql query in PYTHON. 我在PYTHON的sql查询中多次使用CASE语句时遇到问题。 I wonder if I can take away the CASE statement and create a template, and then I can put the template parameter back into the original query. 我想知道是否可以删除CASE语句并创建模板,然后将模板参数放回原始查询中。 Like this: 像这样:

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

        """)

put this into 放进去

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

This does not work. 这是行不通的。 Can anyone help me? 谁能帮我? THX!!! 谢谢!!!

What about : 关于什么 :

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

    """

then 然后

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

Or something along those lines. 或类似的规定。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM