2011-03-16 7 views
3

私は誰かが私に光を見せてくれることを願っています。mysqlの質問のように変換とピボット

私は長い間、1つのクエリで週、日、年ごとに売り上げを得ることができませんでした。

私は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) 

私の本当のクエリはこの1つである:

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 

私は実際にそれが多分に遅く、ここスペインでtehの夜だし、いくつかのアイデアを感謝します。)

私のクエリの結果は、この1つ:

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

期待される結果の行を表示します。 「週、年、日」を1つのクエリでどのように表示すると思いますか? FYI MSアクセス変換演算子は、**毎月**の12列を生成します。 – RichardTheKiwi

+0

@user - 現在のものではなく、希望の出力は何ですか – RichardTheKiwi

答えて

1

例えば、これはあなたの

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'))はあなたに

は、しかし、あなたがしたい場合は、現在の年の最初の日を与える日、7日と年初来の合計を与えますピボットテーブルは、次に

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 

自動的に動的Nを産生TRANSFORMアクセスオペレータの等価ないのMySQL(またはそのことについては、他のまともなRDBMS)は、存在しませんデータからの列の数。

+0

Thnx Richard。私は希望の結果を得ようとしています。私は今あなたに伝えます。 – SauronZ

+0

素晴らしいです! Thnxxxxxxxxxx – SauronZ

+0

私はこれが古い投稿だと知っていますが、同じ解決策を探しているときは解決したら解決策/質問を解決するのに役立つでしょう... – BarclayVision