首页 / MYSQL / mysql查询将行数据动态转换为列
mysql查询将行数据动态转换为列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql查询将行数据动态转换为列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1458字,纯文字阅读大概需要3分钟。
内容图文
我正在进行数据透视表查询.
架构如下
Sno,名称,区
在许多地区可能出现相同的名称,例如,取样本数据
1 Mike CA
2 Mike CA
3 Proctor JB
4 Luke MN
5 Luke MN
6 Mike CA
7 Mike LP
8 Proctor MN
9 Proctor JB
10 Proctor MN
11 Luke MN
如你所见,我有一组4个不同的区域(CA,JB,MN,LP).现在我想通过将名称映射到区域来获取为其生成的数据透视表
Name CA JB MN LP
Mike 3 0 0 1
Proctor 0 2 2 0
Luke 0 0 3 0
我为此写了以下查询
select name,sum(if(District="CA",1,0)) as "CA",sum(if(District="JB",1,0)) as "JB",sum(if(District="MN",1,0)) as "MN",sum(if(District="LP",1,0)) as "LP" from district_details group by name
但是,区域可能会增加,在这种情况下,我将不得不再次手动编辑查询并将新区域添加到其中.
我想知道是否有一个查询可以动态获取不同区域的名称并运行上述查询.我知道我可以通过一个程序来实现并动态生成脚本,还有其他任何方法吗?
我这样问,因为查询的输出“从district_details中选择不同(区)”将返回一个在每一行都有区名的单列,我希望将其转换为列.
解决方法:
您根本无法使用返回可变数量列的静态SQL语句.每当不同地区的数量发生变化时,您需要建立此类声明.要做到这一点,首先执行a
SELECT DISTINCT District FROM district_details;
这将为您提供有详细信息的地区列表.然后构建一个迭代前一个结果的SQL语句(伪代码)
statement = "SELECT name "
For each row returned in d = SELECT DISTINCT District FROM district_details
statement = statement & ", SUM(IF(District=""" & d.District & """,1 ,0)) AS """ & d.District & """"
statement = statement & " FROM district_details GROUP BY name;"
并执行该查询.然后,您需要在代码中处理可变数量的列的处理
内容总结
以上是互联网集市为您收集整理的mysql查询将行数据动态转换为列全部内容,希望文章能够帮你解决mysql查询将行数据动态转换为列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。