【问题标题】:mySQL pivot dynamic dates tablemySQL 透视动态日期表
【发布时间】:2018-04-21 10:25:17
【问题描述】:

我正在运行我的查询

SELECT
DATE_FORMAT(FROM_DAYS(TO_DAYS(st_day_request) -MOD(TO_DAYS(st_day_request) -2, 7)), '%d-%m-%Y') as DATE,
tx_report_id AS 'BUSINESS',
CONCAT(ROUND(AVG(DATEDIFF(dt_dossier_sent,st_day_request) > -5 AND (main.dt_dossier_sent IS NOT NULL AND main.dt_dossier_sent <> '0000-00-00')) * 100),'%') as DISPATCHED_5_AND_MORE,
CONCAT(ROUND(AVG(DATEDIFF(dt_dossier_sent,st_day_request) < -5 AND DATEDIFF(dt_dossier_sent,st_day_request) <= 1 AND (main.dt_dossier_sent IS NOT NULL AND main.dt_dossier_sent <> '0000-00-00')) * 100),'%') as DISPATCHED_4_TO_1,
CONCAT(ROUND(AVG(DATEDIFF(dt_dossier_sent,st_day_request) > 1 AND DATEDIFF(dt_dossier_sent,st_day_request) <= 10 AND (main.dt_dossier_sent IS NOT NULL AND main.dt_dossier_sent <> '0000-00-00')) * 100),'%') as DISPATCHED_2_TO_10,
CONCAT(ROUND(AVG(DATEDIFF(dt_dossier_sent,st_day_request) > 10 AND (main.dt_dossier_sent IS NOT NULL AND main.dt_dossier_sent <> '0000-00-00')) * 100),'%') as DISPATCHED_10_AND_MORE,
CONCAT(ROUND(AVG(main.dt_dossier_sent IS NULL OR main.dt_dossier_sent = '0000-00-00') * 100),'%') as OUTSTANDING FROM
(
SELECT 
    app_contract.id_app,
    app_contract.dt_dossier_sent,
    contract.tx_report_id,
    contract.st_day_request
FROM
    contract
INNER JOIN app_contract ON  app_contract.id_contract = contract.id_contract  AND contract.st_day_request > '2017-09-01' AND contract.id_client = 657
INNER JOIN app_hist ON app_hist.id_app=app_contract.id_app
GROUP BY app_contract.id_app
) as main GROUP BY DATE ORDER BY DATE_FORMAT(st_day_request, '%y') ASC, DATE_FORMAT(st_day_request, '%m') ASC

并在下图中获得结果:

到这里为止,一切都是正确的。我遇到的问题是我想更改(透视/交叉表)我的结果并将我得到的日期作为列,如下图所示:

我尝试了几天,但不幸的是没有结果。有任何想法吗?

PS。如果您无法正常查看图像,请右键单击并在新选项卡中打开。然后你可以放大它们。对不起图片,我将在下一篇文章中复制并粘贴结果。

【问题讨论】:

  • 请不要放图片,只需复制粘贴您想要的结果。这是不可读的。
  • 认真考虑处理应用代码中数据显示的问题。
  • 我支持@Strawberry :在纯 MySQL 中进行旋转是众所周知的痛苦,尤其是当您想通过表中的数据控制列的数量和含义时。使用某种报告语言,或者甚至可以导出到 csv 文件并使用电子表格程序。
  • 我需要用mySql来做。另一种方法是使用 php,所以这很容易。我想看看是否可以通过使用 mySql 来完成

标签: mysql pivot pivot-table crosstab


【解决方案1】:

遵循标签——在 MySQL 中有很多例子说明如何做到这一点。此外,这是一种从 MySQL 存储过程生成 SQL 的自动化方法:http://mysql.rjweb.org/doc.php/pivot

(就我个人而言,我使用通用 PHP 代码将 3 列表转换为矩阵。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多