Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:计算ProductID以获取销售总次数_Sql Server_Count - Fatal编程技术网

Sql server SQL Server:计算ProductID以获取销售总次数

Sql server SQL Server:计算ProductID以获取销售总次数,sql-server,count,Sql Server,Count,我对一个似乎很简单的问题感到困惑。我试图通过对ProductID进行计数和分组来获得整个产品的销售次数。我在网上对它进行了研究,无论我走到哪里,它都只是添加了一个简单的计数,但当我这样做时,它仍然输出相同数量的行 因此,如果我不使用COUNT(例如),它会输出1000行,如果我使用COUNT它会输出1000行,并且不会给出正确的销售时间。它们都列为“1”,不进行分组和计数。我猜这和我的连接有关,但我想不出来 下面是我在使用COUNT后看到的示例(我删除了brand和date_添加的内容,只是为了

我对一个似乎很简单的问题感到困惑。我试图通过对
ProductID
进行计数和分组来获得整个产品的销售次数。我在网上对它进行了研究,无论我走到哪里,它都只是添加了一个简单的
计数
,但当我这样做时,它仍然输出相同数量的行

因此,如果我不使用
COUNT
(例如),它会输出1000行,如果我使用
COUNT
它会输出1000行,并且不会给出正确的销售时间。它们都列为“1”,不进行分组和计数。我猜这和我的连接有关,但我想不出来

下面是我在使用COUNT后看到的示例(我删除了brand和date_添加的内容,只是为了便于阅读)。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,年份为2015年,而您有另一个产品名称小部件,年份为2016年,则每个产品旁边只计算1,因为整行只显示一次。您需要将您的组限制为,以获得准确的计数

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

这会给你一个准确的数字。您只是将您的组限制在太大的样本范围内,无法获得任何唯一的记录。您必须减少选择中的内容,才能使其生效。您需要在选择中包含s.Product和p.title,以便与组匹配。希望这能有所帮助。

它们看起来不正确的原因是因为行中的所有记录都不相同。如果您有一个产品名称小部件2,年份为2015年,而您有另一个产品名称小部件,年份为2016年,则每个产品旁边只计算1,因为整行只显示一次。您需要将您的组限制为,以获得准确的计数

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

这会给你一个准确的数字。您只是将您的组限制在太大的样本范围内,无法获得任何唯一的记录。您必须减少选择中的内容,才能使其生效。您需要在选择中包含s.Product和p.title,以便与组匹配。希望这有帮助。

除非您是通过聚合函数进行筛选(即
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

除非您是通过聚合函数进行筛选(即,
具有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

目前还不完全清楚您对输出的期望,但我觉得您的分组很可疑。我认为您不想按已发送项中的任何值进行分组。你只想按组成你要计数的组的列进行分组。这里不完全清楚你期望的输出是什么,但我觉得你的分组方式很可疑。我认为您不想按已发送项中的任何值进行分组。您只想按组成要计数的组的列进行分组。谢谢!关于记录如何匹配的解释帮助我移动东西并获得所需的数据。再次感谢您的回答:)谢谢!关于记录如何匹配的解释帮助我移动东西并获得所需的数据。再次感谢您的回答:)