34,696
社区成员
各位好。请教一个问题。现有一个表,记录不同t状态下的abc各值。如图:
最终要实现的是统计不同状态t下的 abc 各数值。其中c在t2状态下没有值 就做成0。并且把t的不同状态值做成列要求表结构如下:
code t1 t2
a 20 15
b 20 10
c 10 0(这个0 就是根据语句生成。表中c在t2状态下没有数据的)
请教。谢谢
为啥不用pivot
自己研究出来了。参考了这篇文章
https://geek-docs.com/mysql/mysql-ask-answer/541_mysql_setting_column_values_as_column_names_in_the_sql_query_result.html
虽然文章中用用的是Mysql 但是都是类sql的 触类旁通。参考领悟就不难理解。这篇文章正是我想要的。
我采用了CASE语句进行列值转换来实现。应该是sql查询语句的通用标准。兼容各种sql数据库。。
代码如下:
SELECT code,
SUM(CASE WHEN t = 't1' THEN total ELSE 0 END) as 't1', //把列值作为查询结果的字段
SUM(CASE WHEN t = 't2' THEN total ELSE 0 END) as 't2' //同上
//在这个表中查询。这表就是我问题中的图中的数据表。也是通过语句生成的一个表。在此例中作为数据表源
FROM ( select code, sum(num) as total, t FROM [dbo].[Table_1] where zz='y' group by code,t) as tb
group by code
执行后得到了我要的结果
供其他小白参考