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代码