IT

MySQL Get Quarter(QTD) 1, 2, 3, 4 (금년도)

itgroup 2023. 1. 21. 09:44
반응형

MySQL Get Quarter(QTD) 1, 2, 3, 4 (금년도)

예를 들어, 올해(2017년)의 1, 2, 3, 4분기 실적에 대해 다음과 같이 질문할 수 있을까요?

╔═══════════╦════════╗════════╗════════╗
║     Q1    ║   Q2   ║   Q3   ║   Q4   ║
╠═══════════╬════════╣════════║════════║
║   € K54   ║ € K14  ║ € K0   ║  € K0  ║
╚═══════════╩════════╝════════╝════════╝ 

그리고 이것이 제가 만든 것입니다. (이 쿼리의 Q1은 최신이므로 Q2가 되면 Q2로 바뀝니다.그리고 위의 예시와 같이 다른 것을 보여주고 싶지 않습니다.)

╔══════════════╦
║     Q1       ║
╠══════════════╬
║   € K54      ║
╚══════════════╩

이게 제가 만든 질문입니다결과가 발견되지 않으면 자동으로 € K0으로 표시됩니다.

SELECT IF(SUM(totalExcl) IS NULL,0,
          CONCAT('€ K',
                FORMAT((SUM(totalExcl) / 1000),
                    0,'nl_NL'))) AS Q1
FROM
    ex.ps_order o LEFT JOIN
    ex.ps_oxo_quotation q ON o.id_order = q.idOrder LEFT JOIN
    ex.ps_employee e ON q.idEmployee = e.id_employee
WHERE
    QUARTER(q.date_add) = QUARTER(UTC_TIMESTAMP())
       AND e.lastname IN ('Ver')

이전 분기 쿼리와 현재 분기 쿼리를 만드는 방법을 알고 있습니다.하지만 올해의 Q1, Q2, Q3, Q4와는 다릅니다.


저는 지금 이 결과에 거의 만족하고 있습니다.

╔═════════╦════════╗════════╗════════╗
║    Q1   ║   Q2   ║   Q3   ║   Q4   ║
╠═════════╬════════╣════════║════════║
║€96086,03║ € 0,00 ║ € 0,00 ║ € 0,00 ║
╚═════════╩════════╝════════╝════════╝ 

이 질문으로 (벤조 모르데노 덕분에)

     SELECT 
 CONCAT('€ ',FORMAT(+ CAST(SUM(CASE WHEN QUARTER(q.date_add) = 1 THEN totalExcl ELSE 0 END) AS CHAR(100)), 2, 'nl_NL')) as Q1,
 CONCAT('€ ',FORMAT(+ CAST(SUM(CASE WHEN QUARTER(q.date_add) = 2 THEN totalExcl ELSE 0 END) AS CHAR(100)), 2, 'nl_NL')) as Q2,
 CONCAT('€ ',FORMAT(+ CAST(SUM(CASE WHEN QUARTER(q.date_add) = 3 THEN totalExcl ELSE 0 END) AS CHAR(100)), 2, 'nl_NL')) as Q3,
 CONCAT('€ ',FORMAT(+ CAST(SUM(CASE WHEN QUARTER(q.date_add) = 4 THEN totalExcl ELSE 0 END) as CHAR(100)), 2, 'nl_NL')) as Q4
     FROM

포맷하려면 다음 명령을 사용합니다.

 SELECT 
 CONCAT('€ K',FORMAT(+ CAST(SUM(CASE WHEN QUARTER(q.date_add) = 1 THEN totalexcl ELSE 0 END)/1000 AS CHAR(100)), 0, 'nl_NL')) as Q1,
 CONCAT('€ K',FORMAT(+ CAST(SUM(CASE WHEN QUARTER(q.date_add) = 2 THEN totalexcl ELSE 0 END)/1000 AS CHAR(100)), 0, 'nl_NL')) as Q2,
 CONCAT('€ K',FORMAT(+ CAST(SUM(CASE WHEN QUARTER(q.date_add) = 3 THEN totalexcl ELSE 0 END)/1000 AS CHAR(100)), 0, 'nl_NL')) as Q3,
 CONCAT('€ K',FORMAT(+ CAST(SUM(CASE WHEN QUARTER(q.date_add) = 4 THEN totalexcl ELSE 0 END)/1000 AS CHAR(100)), 0, 'nl_NL')) as Q4
 FROM

결과:

╔═════════╦════════╗════════╗════════╗
║    Q1   ║   Q2   ║   Q3   ║   Q4   ║
╠═════════╬════════╣════════║════════║
║ € K96   ║  € 0   ║  € 0   ║  € 0   ║
╚═════════╩════════╝════════╝════════╝ 

다음과 같은 경우를 사용할 수 있습니다.

 SELECT 
 '€ K' + CAST(SUM(CASE WHEN QUARTER(q.date_add)= 1 THEN totalexcl ELSE 0 END) AS VARCHAR(100)) as Q1,
 '€ K' + CAST(SUM(CASE WHEN QUARTER(q.date_add) = 2 THEN totalexcl ELSE 0 END) AS VARCHAR(100)) as Q2,
 '€ K' + CAST(SUM(CASE WHEN QUARTER(q.date_add)= 3 THEN totalexcl ELSE 0 END) AS VARCHAR(100)) as Q3,
 '€ K' + CAST(SUM(CASE WHEN QUARTER(q.date_add)= 4 THEN totalexcl ELSE 0 END) as VARCHAR(100)) as Q4
 FROM
  ex.ps_order o LEFT JOIN
  ex.ps_oxo_quotation q ON o.id_order = q.idOrder LEFT JOIN
  ex.ps_employee e ON q.idEmployee = e.id_employee
  WHERE e.lastname IN ('Ver')

언급URL : https://stackoverflow.com/questions/42781064/mysql-get-quarter-qtd-1-2-3-4-for-current-year

반응형