2011-03-16 71 views
3

我希望有人能讓我看到光。轉換和樞軸像在MySQL問題

我試着很長時間纔得到結果o一週內,一天和一年的銷售額在一個查詢中沒有機會。

我發現了一個可以幫助我但不在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 

真的thnx所有。

+0

顯示預期的結果行。您如何期望在一個查詢中顯示「周,年,日」?僅供參考,MS Access轉換運算符將生成12列,每**個月**一列。 – RichardTheKiwi 2011-03-16 22:52:18

+0

@user - 什麼是所需的輸出,而不是你目前有什麼 – RichardTheKiwi 2011-03-16 23:27:59

回答

1

例如,這會給你的那一天,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的(或與此有關的任何其它體面RDBMS)的訪問操作者變換,它可以自動產生一個動態的n當量數據列的數目。

+0

thnx理查德。我試圖得到理想的結果。我現在告訴你。 – SauronZ 2011-03-16 23:15:52

+0

它很棒! Thnxxxxxxxxxx – SauronZ 2011-03-16 23:42:35

+0

我知道這是一箇舊帖子,但在尋找相同的解決方案時,如果它解決了問題,將解決方案/解決方案發布到問題將會很有幫助。 – BarclayVision 2016-06-19 10:48:38