2016-11-29 15 views
0

と思われるものに問題があります。は簡単なクエリです。 ProductIDでカウントしてグループ化することで、商品全体の販売時間を取得しようとしています。私はそれをオンラインで調べてきましたが、どこに行くのかは単なるCOUNTを追加するだけですが、私はそれを実行しても同じ数の行を出力します。SQLサーバー:売り上げ合計時間を取得するProductID

例えば、COUNTを使用しないと、1,000行が出力されます。COUNTを使用すると、1,000行が出力され、正しい時間が売られません。それらはすべて「1」としてリストされ、グループ化されずにカウントされます。私はそれが私の結合と関係があると推測しているが、私はそれを理解することはできません。

ここでは、COUNTを使用した後の表示例を示します(ブランドを削除し、読みやすいようにdate_addedを使用しています)。 ProductIDはグループ化して数えても、複数回表示されます。任意の助け

SELECT TOP (100) PERCENT 
    COUNT(s.ProductID) AS times_sold, 
    s.ProductID, p.title, p.brandname, p.date_added 
FROM 
    dbo.TBL_OrderSummary AS s 
INNER JOIN 
    dbo.jewelry AS p ON s.ProductID = p.ProductID 
INNER JOIN 
    dbo.sent_items AS i ON s.InvoiceID = i.ID 
GROUP BY 
    s.ProductID, p.title, p.brandname, p.flare_type, p.date_added, 
    i.date_order_placed, i.ship_code, p.jewelry 
HAVING 
    (p.title LIKE '%stone%') 
    AND (i.date_order_placed > CONVERT(DATETIME, '2016-01-01 00:00:00', 102)) 
    AND (i.ship_code = N'paid') 
    AND (p.flare_type = 'Single flare') 
    AND (p.jewelry LIKE '%plugs%') 

ありがとう:

times_sold | ProductID | title  
---------- | --------- | --------- 
1   | 17998  | title 2 
1   | 13670  | title 3 
1   | 17956  | title 4 
1   | 4569  | title 5 
1   | 12598  | title 1 
1   | 12598  | title 1 
1   | 17998  | title 2 

そして、ここでは、私が実行しているクエリです!

+0

をあなたが私にはかなり疑わしいルックスで、ここでの出力が、あなたのグループのために期待するものは全く明らかではありません。私はあなたがsent_itemsのいずれかの値でグループ化したいとは思わない。カウントしたいグループを構成する列でグループ化するだけです。 –

答えて

2

彼らが正しく見ていない理由は、レコードが行全体にわたって同じではないためです。製品名ウィジェット2があり、作成年が2015で、商品名ウィジェットがもう1つあり、2016年に作成された場合は、行全体が1回だけ表示されるため、各商品の横に1を数えます。正確なカウントを取得するには、グループを制限する必要があります。

GROUP BY s.productID, p.title, COUNT(s.productID) 

これにより、正確なカウントが得られます。ユニークなレコードを取得するには、サンプルをあまりにも多くのサンプルにグループを制限するだけです。あなたが選択したものを削減しなければならないでしょう。あなたが選択したものをs.Productとp.titleにグループ化する必要があります。お役に立てれば。

+0

ありがとう!レコードがどのように一致しなければならないかについての説明は、私が物事を移動して必要なデータを得るのを助けました。もう一度お返事ありがとうございます:) –

+0

あなたはようこそ!私が助けてくれたことを知ってうれしかった。 –

0

集計関数(つまり、HAVING COUNT(s.ProductID) > 2)でフィルタリングしない限り、すべての選択基準をWHERE行に移動できます。

だからあなたが試みることができる:

select count(s.ProductID) times_sold, s.ProductID, p.title 
from dbo.TBL_OrderSummary s inner join dbo.jewelry p on s.ProductID = p.ProductID 
    inner join dbo.sent_items i on s.InvoiceID = i.ID 
where p.title like '%stone%' 
    and i.date_order_placed > CONVERT(DATETIME, '2016-01-01 00:00:00', 102) 
    and i.ship_code = N'paid' 
    and p.flare_type = 'Single flare' 
    and p.jewelry like '%plugs%' 
group by s.ProductID, p.title 
関連する問題