2016-05-01 11 views
0
SELECT ShopOrder.OrderDate 
, Book.BookID 
, Book.title 
, COUNT(ShopOrder.ShopOrderID) AS "Total number of order" 
, SUM (Orderline.Quantity) AS "Total quantity" 
, Orderline.UnitSellingPrice * Orderline.Quantity AS "Total order value" 
, book.Price * Orderline.Quantity AS "Total retail value" 
     FROM ShopOrder 
     JOIN Orderline 
     ON Orderline.ShopOrderID = ShopOrder.ShopOrderID 
     JOIN Book 
     ON Book.BookID = Orderline.BookID 
     JOIN Publisher 
     ON Publisher.PublisherID = Book.PublisherID 
    WHERE Publisher.name = 'Addison Wesley' 
    GROUP 
     BY ShopOrder.OrderDate 
, Book.BookID 
, Book.title 
, Orderline.UnitSellingPrice 
, Orderline.Quantity, book.Price 
, Orderline.Quantity, ShopOrder.ShopOrderID 
    ORDER 
     BY ShopOrder.OrderDate 

Please look at the pictureSQLソート日付

私は年と月によってクエリ受注日のグループをしたいので、同じ月のデータは、あなたの助けのために一緒に

おかげで多くを追加することができます

+0

への便利なショートカットは、あなたの質問にタグを付けているあなたは

, Orderline.UnitSellingPrice * Orderline.Quantity AS "Total order value" , book.Price * Orderline.Quantity AS "Total retail value" 

を集約すべきか、group byためにあなたcount(...)値は1 YEAR(myDate)MONTH(myDate)に等しいすべてを持っていますあなたが使用しているデータベースで –

答えて

1

DATEPART関数を使用することができます日付から年と月を調べ、selectgroup by列の値を使用します。どのようにこれを行うかは、データベースに大きく依存します。多くのサポート機能はyear()month()と呼ばれています。

次に、必要なフィールドだけを集計する必要があります。このようなもの:

SELECT YEAR(so.OrderDate) as yyyy, MONTH(so.OrderDate) as mm,  
     b.BookID, b.title, 
     COUNT(so.ShopOrderID) AS "Total number of order", 
     SUM(ol.Quantity) AS "Total quantity", 
     SUM(ol.UnitSellingPrice * ol.Quantity AS "Total order value", 
     SUM(b.Price * ol.Quantity) AS "Total retail value" 
FROM ShopOrder so JOIN 
    Orderline ol 
    ON ol.ShopOrderID = so.ShopOrderID JOIN 
    Book b 
    ON b.BookID = ol.BookID JOIN 
    Publisher p 
    ON p.PublisherID = b.PublisherID 
WHERE p.name = 'Addison Wesley' 
GROUP BY YEAR(so.OrderDate), MONTH(so.OrderDate), b.BookID, b.title 
ORDER BY MIN(so.OrderDate) 

メモテーブルのエイリアスを使用すると、クエリの書き込みと読み込みが簡単になります。

上記は、MySQL、DB2、およびSQL Serverで動作します。 PostgresとOracleではto_char(so.OrderDate, 'YYYY-MM')です。

+0

私はPGAdmin IIIを使用していますか?関数年(date)が存在しないと言ったので –

+0

pgadminはPostgres用です。代わりに 'to_char(so.OrderDate、 'YYYY-MM')'を使用してください。 –

+0

ありがとう!非常に感謝します! –

0

グループのために、あなたはあなたが元に必要

GROUP BY (DATEPART(yyyy, ShopOrder.OrderDate), DATEPART(mm, ShopOrder.OrderDate)) 
0

datepart機能(MS SQL Server上)