首页 > 解决方案 > 简单的 PIVOT 查询引发错误消息

问题描述

我使用以下 SQL 从我们的数据库中获取访问:

SELECT 
    t.country, MONTH(visit_date), t.visits
FROM
    visits t
WHERE 
    t.visit_date BETWEEN '2017-01-01' AND '2017-12-31'
ORDER BY 
    t.country

此查询的结果如下所示:

   Country     Month      Visits
   -------------------------------
    DE           1        5.000
    DE           2        6.000
    :            :          :
    :            :          :
    US           1        5.400
    US           2        3.000
    :            :          :
    :            :          :

到目前为止,这一切都很好。

现在我想旋转结果,使其最终看起来像这样:

        1          2        3        4
DE    10.000    15.000   30.000    20.000
US    20.220    18.400   40.000    19.000

因此我尝试使用以下 SQL:

SELECT 
    *
FROM
    (SELECT t.country, MONTH(visit_date), t.visits
     FROM visits t
     WHERE t.visit_date BETWEEN '2017-01-01' AND '2017-12-31'
     ORDER BY t.country) AS s
PIVOT
    (SUM(t.visits)
     FOR MONTH(t.visit_date) IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
    ) AS pvt

但是,此查询会引发错误:

错误代码:1064。您的 SQL 语法有错误;检查与您的数据库服务器版本相对应的手册,以了解在 'PIVOT ( SUM(t.unique_visits) FOR MONTH(t.visit_date) IN (1, 2, 3, 4, 5, 6, 7,' ) 附近使用的正确语法在第 7 行

您知道我的查询中哪里有错误吗?

标签: mysqlsql

解决方案


In MySQL you don't have PIVOT function.

In case you can use alternative ways with connect SUM values.

Good example you find in THIS LINK


推荐阅读