Преобразование и поворот, как в вопросе MySQL - PullRequest
3 голосов
/ 17 марта 2011

Я надеюсь, что кто-то сможет показать мне свет.

Я давно пытаюсь получить результат о продажах по неделям, дням и годам в одном запросе без шансов.

Я нашел синтаксис, который может помочь мне, но не работает в mysql.

    TRANSFORM 
   Sum(Cantidad) AS Ventas 
SELECT 
   Producto, Cantidad 
FROM 
   Pedidos 
WHERE 
   Fecha Between #01-01-1998# And #12-31-1998# 
GROUP BY 
   Producto 
ORDER BY 
   Producto 
PIVOT 
   DatePart("m", Fecha) 

Мой настоящий запрос такой:

select sum(orders.final_price) AS total
     , orders.id_comercial
     , vendedores.nombre
from orders
   , vendedores
WHERE orders.id_comercial = vendedores.id
  AND DATE(orders.date_purchased) = DATE(NOW())
GROUP BY orders.id_comercial

Я действительно ценю некоторые идеи, этовозможно, до поздней ночи здесь, в Испании;)

Результат моего запроса таков:

total         id_comercial         nombre
740.83        24        AITOR ANGULO
2069.37       29        FERNANDO I
482.05        32        JOSE ANDRES
961.32        33        ALBERTO FERNANDEZ -CANTABRIA-
908.66        34        GONZALO
49.54         38        LUIS LOPEZ
4082.42       39        JULEN DEL CURA
1512.87       43        ALBERTO POBLACION
1268.91       44        MASSIMO
3269.08       45        JOSE RAMON BURGA
56.49         47        EMPRESA
2791.65       48        MARCO MORILLO
1445.57       61        TINO
869.73        63        SONIA
1052.02       381       DAVID ARIAS

Действительно, спасибо всем.

1 Ответ

1 голос
/ 17 марта 2011

Например, это даст вам общее число за день, 7 дней и с начала года

select sum(case when DATE(orders.date_purchased) = DATE(NOW()) then orders.final_price end) AS TotalToday
     , sum(case when DATE(orders.date_purchased) >= DATE(NOW() -7) then orders.final_price end) AS TotalLast7Days
     , sum(case when YEAR(orders.date_purchased) = YEAR(NOW()) then orders.final_price end) AS TotalYearToDate
     , orders.id_comercial
     , vendedores.nombre
from orders
   , vendedores
WHERE orders.id_comercial = vendedores.id
  AND orders.date_purchased >= date(concat(year(now()),'-01-01'))
GROUP BY orders.id_comercial, vendedores.nombre

FYI date(concat(year(now()),'-01-01')) дает вам первый день текущего года

Но если вам нужна сводная таблица, тогда

select sum(case when MONTH(orders.date_purchased) = 1 then orders.final_price end) AS Jan
     , sum(case when MONTH(orders.date_purchased) = 2 then orders.final_price end) AS Feb
      ....
     , sum(case when MONTH(orders.date_purchased) = 12 then orders.final_price end) AS Dec
     , orders.id_comercial
     , vendedores.nombre
from orders
   , vendedores
WHERE orders.id_comercial = vendedores.id
  AND orders.date_purchased >= date(concat(year(now()),'-01-01'))
GROUP BY orders.id_comercial, vendedores.nombre

Не существует MySQL (или любой другой достойной СУБД) эквивалента оператора доступа TRANSFORM, который автоматически создает динамическое число столбцов из данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...