SQL Server:计算ProductID以获得总销售时间

时间:2016-11-29 15:41:39

标签: sql-server count

我在使用似乎进行简单查询时遇到了问题。我试图通过ProductID计算和分组来获得整个产品销售的次数。我已经在线研究了它,我去的每个地方都只添加一个简单的COUNT,但是当我这样做时,它仍会输出相同数量的行。

因此,如果我不使用COUNT(例如),则会输出1,000行,如果我使用COUNT,则输出1,000行并且不会给我正确的行时间卖了。它们都列为" 1"而不是被分组和计算。我猜测它与我的联接有关,但我无法弄明白。

以下是我在使用COUNT后看到的一个示例(我删除了品牌和date_added只是为了让它更容易阅读)。 ProductID不止一次显示,即使它们应该组合在一起并计算在内。

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

以下是我正在运行的查询:

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%')

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

他们看起来不正确的原因是因为行中的记录不一致。如果你有一个产品名称Widget 2,年份是2015年,你有另一个产品名称小部件和年份2016年,每个产品旁边只计算1,因为整行只出现一次。您需要限制您的小组以获得准确的计数。

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

这应该给你一个准确的计数。您只是将您的组限制为过大的样本以获取任何唯一记录。您必须减少选择中的内容才能使用,您需要在选择中使用s.Product和p.title来匹配组。希望这会有所帮助。

答案 1 :(得分: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