首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >转置mysql查询

转置mysql查询
EN

Stack Overflow用户
提问于 2015-08-05 02:43:23
回答 2查看 57关注 0票数 0

对于这样的问题,我见过很多答案,但是没有一个问题得到解释,因此我无法理解它,也无法用于我的案例。

代码语言:javascript
运行
复制
SELECT st.name, SUM(sa.val), sa.sale_date FROM sales sa
INNER JOIN employee e ON sa.employee_id
INNER JOIN store st ON e.store_id
GROUP BY st.name, sa.sale_date

考虑到以下查询结果:

http://sqlfiddle.com/#!9/0faa35/5

代码语言:javascript
运行
复制
+---------+-------------+------------------------+
|  name   | SUM(sa.val) |       sale_date        |
+---------+-------------+------------------------+
| Store 1 |         800 | July, 29 2015 00:00:00 |
| Store 1 |         700 | July, 30 2015 00:00:00 |
| Store 2 |         800 | July, 29 2015 00:00:00 |
| Store 2 |         700 | July, 30 2015 00:00:00 |
+---------+-------------+------------------------+

我需要转接(将商店名称分组),这样它就变成了:

代码语言:javascript
运行
复制
+------------+---------+---------+
|    Date    | Store 1 | Store 2 |
+------------+---------+---------+
| 2015-07-29 |     800 |     800 |
| 2015-07-30 |     700 |     700 |
+------------+---------+---------+
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-05 04:20:21

您可以使用准备好的查询:

代码语言:javascript
运行
复制
SELECT CONCAT(
  'SELECT sales.sale_date,',
  GROUP_CONCAT('SUM(
     CASE WHEN employee.store_id = ', id , '
     THEN val
     ELSE 0 END) AS `', REPLACE(name, ' ', ''), '`' SEPARATOR ','),
' FROM
  employee
  INNER JOIN sales ON(employee.id = employee_id)
  GROUP BY sales.sale_date'
) INTO @qry FROM (SELECT name,id FROM store) as stores;
PREPARE stmt FROM @qry;
EXECUTE stmt;

Fiddle: http://sqlfiddle.com/#!9/0faa35/39/2

票数 0
EN

Stack Overflow用户

发布于 2015-08-05 02:47:51

这是一个基本的枢轴查询。在MySQL中,最简单的方法是条件聚合。给定SQL Fiddle中的查询,逻辑如下:

代码语言:javascript
运行
复制
SELECT sa.sale_date,
       SUM(CASE WHEN st.name = 'Store 1' THEN val ELSE 0 END) as Store1,
       SUM(CASE WHEN st.name = 'Store 2' THEN val ELSE 0 END) as Store2
FROM sales sa INNER JOIN
     employee e
     ON sa.employee_id INNER JOIN
     store st
     ON e.store_id
GROUP BY sa.sale_date;

注意:你应该把实际的问题放在你的问题上。

这里是一个SQL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31822563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档