2017-11-08 1 views
2

내가 내 쿼리MySQL의 피벗 동적 날짜 테이블

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 

을 실행하고 아래의 이미지에 결과를 얻고있다 :

Results from my query

여기까지, 모든 것이 올바른 것입니다. 나는을 위해 노력하고

Result i need to get

: 내가 가지고있는 문제는 아래의 다음 이미지에서 볼 수 있듯이, 내가 열로받을 날짜를 (피벗/크로스 탭) 내 결과를 변경하고 데려 가고 싶다는 것입니다 며칠이지만 불행히도 결과가 없습니다. 어떤 아이디어?

추신. 이미지가 제대로 표시되지 않으면 마우스 오른쪽 버튼을 클릭하고 새 탭에서 엽니 다. 그런 다음 그들을 확대 할 수 있습니다. 죄송 이미지, 나는 복사하고 내 다음 게시물에 결과를 붙여 넣습니다.

+1

넣어하지 마십시오 원하는 사진을 복사하여 붙여 넣기 만하면됩니다. 이것은 읽을 수 없습니다. – Derlin

+1

응용 프로그램 코드에서 데이터 표시 문제를 심각하게 고려하십시오. – Strawberry

+0

저는 @Strawberry와 함께합니다 : 순수한 MySQL의 피벗은 목에 악명 높은 통증입니다. 특히 테이블의 데이터를 통해 열의 수와 의미를 제어하려는 경우 더욱 그렇습니다. 몇 가지보고 언어를 사용하거나 csv 파일로 내보내고 스프레드 시트 프로그램을 사용할 수도 있습니다. –

답변

0

태그를 따르십시오 - MySQL에서하는 방법에 대한 많은 예제가 있습니다. 또한, 여기에 MySQL을 저장 프로 시저에서 SQL을 생성하는 자동화 된 방법입니다. (개인적으로, 나는 일반적인 PHP 코드를 사용 매트릭스에 3 열 테이블을 회전)

http://mysql.rjweb.org/doc.php/pivot