Python SQL查询如何简化几个';当';(超过26项)

Python SQL查询如何简化几个';当';(超过26项),python,sql,Python,Sql,假设我在表x中有一些样本数据,如下所示: code_x code_y val date ------------------------------------------- 1 00001 111 500 20191107 2 00001 222 1000 20191107 3 00002 333 200 20191108

假设我在
表x
中有一些样本数据,如下所示:

    code_x   code_y      val            date
   -------------------------------------------
1   00001    111         500         20191107
2   00001    222         1000        20191107
3   00002    333         200         20191108
4   00002    444         400         20191108
.....
99  00029    888         200         20191111
100 00030    999         400         20191112
 table_x.code_y   remark
-------------------------
1   111            a
2   222            b
3   333            c
4   444            d 
5   555            b 
6   666            e 
 ....
100 999            z 
以及
表y
中的一些示例数据,如下所示:

    code_x   code_y      val            date
   -------------------------------------------
1   00001    111         500         20191107
2   00001    222         1000        20191107
3   00002    333         200         20191108
4   00002    444         400         20191108
.....
99  00029    888         200         20191111
100 00030    999         400         20191112
 table_x.code_y   remark
-------------------------
1   111            a
2   222            b
3   333            c
4   444            d 
5   555            b 
6   666            e 
 ....
100 999            z 
当我输入代码“00001”以及“20191101”和“20191112”之间的日期时,我需要如下输出:(总结备注值从“a”到“z”,共26项)

        code   value_of_remark_a  value_of_remark_b  ....... value_of_remark_z 
        -----------------------------------------------------------------------
    1   00001        500             1000            .......   2000
以下输出也适用于我们:

        code     val     remark
        ---------------
    1  00001     500       a 
    2  00001     1000      b 
     ........
    26 00001     500       z
此SQL查询如下所示,是否有任何简单的SQL查询?当备注=a时,我是否必须将26次
case写入备注=z时的
case

SELECT t.code_x,
    sum(CASE WHEN t1.remark='a' then t.val ELSE 0 END ) AS val_of_a,
    sum(CASE WHEN t1.remark='b' then t.val ELSE 0 END ) AS val_of_b,
    sum(CASE WHEN t1.remark='c' then t.val ELSE 0 END ) AS val_of_c,
    sum(CASE WHEN t1.remark='d' then t.val ELSE 0 END ) AS val_of_d,
    -- The remark from 'a' to 'z', totle 26 items
    -- Is there any easy query to instead of these redundant SQL query?
    sum(CASE WHEN t1.remark='z' then t.val ELSE 0 END ) AS val_of_z
FROM table_x t
LEFT JOIN table_y t1
    ON t.code_y = t1.code_y
WHERE t.code_x IN ('%(code_x)s')
    AND t.code_x BETWEEN '%(start_date)s' AND '%(end_date)s'
GROUP BY t.code_x, t.date

非常感谢您的建议。

这个怎么样?我必须在我们公司的服务器准备好后进行验证

SELECT t.code_x, val, t1.remark
FROM(
    SELECT t.code_x,
    sum(CASE WHEN t1.remark IN ('a', 'b', 'c', 'd', 'e'......'z') then t.value ELSE 0 END ) AS val,
    FROM tabl_x t
    LEFT JOIN table_y t1
        ON t.code_y = t1.code_y
    WHERE t.code_x IN ('%(code_x)s')
        AND t.code_x BETWEEN '%(start_date)s' AND '%(end_date)s'
    GROUP BY t.code_x, t.date) AS res

什么是
sql版本
?你的代码很好。@maSTAShuFu很抱歉,这有什么关系?
“%(code\x)s%”(start\u date)s%(end\u date)s
我认为t-sql不理解这些代码,除非这是我不知道的新代码of@maSTAShuFu嗨,请忽略那些代码,那些是python代码