【问题标题】:Group date and Pivot in MySQLMySQL中的分组日期和数据透视
【发布时间】:2015-12-17 15:18:22
【问题描述】:

我的 SQL 请求被卡住了。 我想获取名为 MONTANT 的每一天的列的总和以及每个商店的编号。

我的 SQL 请求是:

SELECT DATE AS 'JOUR', "1", "2", "3", "4", "5"

FROM ticket_reglement

UP PIVOT (SUM(MONTANT) FOR NUMERO_CAISSE IN ("1", "2", "3", "4", "5")) AS pvt 

WHERE DATE BETWEEN '2015-12-07' AND '2015-12-13'

从 1 到 5 的数字是我要旋转的商店编号。 此请求有效,但“JOUR”列(包含日期)每天包含几次。例如:

  JOUR      |  1  |  2  |  3  |
____________|_____|_____|_____|
 07/12/2015 |  5  |  0  |  1  |
 07/12/2015 |  3  |  2  |  0  |
 08/12/2015 |  1  |  0  |  3  |

如何更改我的请求以获取每天的总和? (一天一行)

我也想要对 MySQL 的相同请求,但不幸的是 MySQL 不存在 UP PIVOT。我已经搜索了一些关于此的问题,但没有找到替代方法的真正答案。

感谢您的帮助。

【问题讨论】:

  • 在查询中使用GROUP BY DATE
  • 按日期分组不起作用。

标签: mysql sql-server sum pivot


【解决方案1】:
SELECT *
FROM (
    SELECT [DATE], MONTANT, NUMERO_CAISSE
    FROM dbo.ticket_reglement
) t
PIVOT (
    COUNT(MONTANT)
    FOR NUMERO_CAISSE IN ([1], [2], [3], [4], [5]) 
) p

更新-

SELECT
     `DATE`
    , COUNT(CASE WHEN `NUMERO_CAISSE` = 1 THEN 1 END) AS `1`
    , COUNT(CASE WHEN `NUMERO_CAISSE` = 2 THEN 1 END) AS `2`
    , COUNT(CASE WHEN `NUMERO_CAISSE` = 3 THEN 1 END) AS `3`
    , COUNT(CASE WHEN `NUMERO_CAISSE` = 4 THEN 1 END) AS `4`
    , COUNT(CASE WHEN `NUMERO_CAISSE` = 5 THEN 1 END) AS `5`
FROM ticket_reglement
GROUP BY `DATE`

【讨论】:

  • 这项工作是我想要的 SQL Server。我只需要用 SUM 替换 COUNT,但非常感谢。我仍然不太习惯 PIVOT。你知道如何用 MySQL 替换 PIVOT 吗?
  • 非常感谢您的宝贵时间和回复
猜你喜欢
  • 2016-04-23
  • 2022-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
相关资源
最近更新 更多