【发布时间】: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