mysql - 如何明智地设置结果日期
问题描述
我的表有以下记录,并且我需要将结果设置在数据表日期的下方。
date code lc_code qty
7/1/2018 MC20651 1126 322.00
6/1/2018 MC10102 3356 30.00
5/1/2018 MC10201 4422 56.00
7/1/2018 MC10303 5065 55.00
4/1/2018 MC20902 7012 65.00
4/1/2018 MC50201 1258 45.00
3/1/2018 MC10201 1126 86.00
3/1/2018 MC50201 7012 14.25
2/1/2018 MC20651 1258 322.00
7/1/2018 MC20651 3356 78.00
下面是我需要设置为数据表的内容。你能提供最好的查询来做到这一点吗?,我设法得到这些值的总和,但我很难按行获得那个值
| Code | 2/1/2018 | 3/1/2018 | 4/1/2018 | 5/1/2018 | 6/1/2018 | 7/1/2018 |
-----------------------------------------------------------------------------------------------
| MC20651 | 322.00| 78.00| 0.00 | 0.00 | 0.00 | 322.00 | 0.00| 0.00|
------------------------------------------------------------------------------------------------
| MC10102 | 0.00 | 30.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00| 0.00|
------------------------------------------------------------------------------------------------
| MC10201 | 86.00| 0.00 | 56.00 | 0.00 | 0.00 | 134.25 | 0.00| 0.00|
------------------------------------------------------------------------------------------------
| MC10303 | 0.00 | 0.00 | 0.00 | 55.00 | 0.00 | 0.00 | 0.00| 0.00|
------------------------------------------------------------------------------------------------
| MC20902 | 0.00 | 0.00 | 0.00 | 960.00 | 65.00 | 0.00 | 0.00| 0.00|
------------------------------------------------------------------------------------------------
| MC50201 | 0.00 | 0.00 | 0.00 | 0.00 | 14.25 | 45.00| 0.00| 0.00|
------------------------------------------------------------------------------------------------
解决方案
您可以使用CASE WHEN
WithSUM
函数来制作它。
SELECT code,
SUM(CASE WHEN date = '2/1/2018' THEN qty ELSE 0 END) AS `2/1/2018`,
SUM(CASE WHEN date = '3/1/2018' THEN qty ELSE 0 END) AS `3/1/2018`,
SUM(CASE WHEN date = '4/1/2018' THEN qty ELSE 0 END) AS `4/1/2018`,
SUM(CASE WHEN date = '5/1/2018' THEN qty ELSE 0 END) AS `5/1/2018`,
SUM(CASE WHEN date = '6/1/2018' THEN qty ELSE 0 END) AS `6/1/2018`,
SUM(CASE WHEN date = '7/1/2018' THEN qty ELSE 0 END) AS `7/1/2018`
FROM T
GROUP BY code
编辑
如果您不想硬编码,可以使用 Dynamic PIVOT
动态创建了您的 SQL,然后使用执行它。
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
看起来像这样。
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(CASE WHEN date = ''',
date,
'''THEN qty ELSE 0 END) AS `',
date,'`'
)
) INTO @sql
FROM T;
SET @sql = CONCAT('SELECT code,', @sql, '
FROM T
GROUP BY code;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
推荐阅读
- c - Linked List 包含另一个链表,嵌套链表
- google-cloud-platform - 'projects/$project_id/regions/us-central1 所需的 'compute.regions.get' 权限
- sql-server - 如何在 Order by 子句中使用计算别名?
- cors - 对 Tomcat 服务器进行 API 调用时如何修复“被 CORS 策略阻止”错误
- vue-cli - Vue-cli 运行构建 TypeError 'name' 未定义
- reactjs - 如何在反应中使用钩子路由器获取当前的url路径?
- java - 当 String 值为动态时处理 ArrayIndexBoundsOfException
- react-native - 持久补液后记录用户
- javascript - 出现错误 ValidatorError: Path `id` is required。在 mongo 数据库中
- algorithm - 可以对图形进行着色以使相邻顶点具有不同的颜色并且不相邻的顶点具有相同的颜色吗?