【问题标题】:MySQL get Quarter (QTD) 1,2,3,4 for current yearMySQL 获得本年度的 Quarter (QTD) 1,2,3,4
【发布时间】:2017-03-14 08:30:03
【问题描述】:

我想知道是否可以使用 Quarter 1、2、3 和 4 的结果进行查询。 对于本年度(目前为 2017 年),例如:

╔═══════════╦════════╗════════╗════════╗
║     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 ║
╚═════════╩════════╝════════╝════════╝ 

有了这个查询:(感谢Bennjoe Mordeno

     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   ║
╚═════════╩════════╝════════╝════════╝ 

【问题讨论】:

  • 热爱 unicode 艺术
  • 您可以只删除查询的 Q2 Q3 Q4 列上的字符串“K”。它的作用只是将'€ K'(您将更改为'€')与计算的总和(转换为字符串)一起连接,因此要删除K,只需在连接它们之前删除K。
  • 糟糕,我没有注意到您希望它被格式化。如果只是将其除以 1000,那么只需将其更改为这个。 CAST(SUM(CASE WHEN QUARTER(q.date_add) = 1 THEN totalexcl ELSE 0 END)/1000 AS CHAR(100)) 作为 Q1
  • 感谢您的朋友们,格式都很好,反之亦然。
  • 很高兴为您提供帮助! @Deniz

标签: mysql sql mariadb


【解决方案1】:

您可以在以下情况下使用案例

 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')

【讨论】:

  • 我收到此错误错误代码:1064。您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在 'VARCHAR(100)) 附近作为 Q1 使用的正确语法,'€ K' + CAST(SUM(CASE WHEN Quarter = 2 THEN totalexcl EL' 在第 2 行(语法错误:意外的'VARCHAR'(varchar))
  • 我修复了将 VARCHAR 更改为 CHAR 但现在我得到这个错误代码:1054。“字段列表”中的未知列“季度”
  • 请尝试用 QUARTER(q.date_add) @Deniz 替换 Quarter
猜你喜欢
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多