Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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查询-使用COL从表中获取最畅销的商品(销售数量、商品编号、编号)_Sql_Sql Server_Select_Group By - Fatal编程技术网

SQL查询-使用COL从表中获取最畅销的商品(销售数量、商品编号、编号)

SQL查询-使用COL从表中获取最畅销的商品(销售数量、商品编号、编号),sql,sql-server,select,group-by,Sql,Sql Server,Select,Group By,您好,我有一个包含列的表: saled qty, item no, no -3, 1996-s, 149 -2, 1996-s, 150 -2, 1968-b, 151 现在我应该得到最畅销的产品了。也许我必须以某种方式按项目编号分组,然后按销售数量排序,然后我可以选择前3名,例如 更新: 还有其他我不需要的列,但由于它们,我得到了错误: 时间戳“”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中 SELECT TOP(3) item_no, SUM(sal

您好,我有一个包含列的表:

saled qty, item no, no
-3, 1996-s, 149
-2, 1996-s, 150
-2, 1968-b, 151
现在我应该得到最畅销的产品了。也许我必须以某种方式按项目编号分组,然后按销售数量排序,然后我可以选择前3名,例如

更新: 还有其他我不需要的列,但由于它们,我得到了错误:

时间戳“”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中

SELECT TOP(3) 
    item_no, 
    SUM(saled qty) 
FROM 
    TABLENAME 
GROUP BY 
    item_no, [Item Ledger Entry Type]
HAVING [Item Ledger Entry Type] = 1
ORDER BY 
    SUM(saled qty) DESC
差不多了

SELECT TOP(3) [Item No_], SUM([Invoiced Quantity]) as [qty] 
FROM 
    [Demo Database NAV (7 - 1)].[dbo].[CRONUS (Schweiz) AG$Value Entry]
GROUP BY 
    [Item No_]
HAVING [Item Ledger Entry Type] = 1
ORDER BY 
    SUM([Invoiced Quantity]) DESC
给出错误:HAVING子句中的“项目分类账条目类型”无效,因为它未包含在聚合函数或GROUP BY子句中

SELECT TOP(3) 
    item_no, 
    SUM(saled qty) 
FROM 
    TABLENAME 
GROUP BY 
    item_no, [Item Ledger Entry Type]
HAVING [Item Ledger Entry Type] = 1
ORDER BY 
    SUM(saled qty) DESC

这取决于您是希望进行聚合前过滤还是聚合后过滤

只要用你想要的任何数量的产品替换3

说明: 执行group by时,只能在结果中包含group by子句的一部分或以某种方式聚合的列。在这里,我使用了SUM来聚合saled_qty列,并从您的查询中删除了所有其他列

考虑这一点的最佳方式是想象您自己而不是SQL正在对数据进行分组。。。。假设我们按项目编号分组。。。您如何知道如何处理所有销售数量值?对于结果的每一行,您将有多个saled_qty值(分组子句中的每一行……在本例中为item_no)。SQL不允许您对此模棱两可,因此会抛出一个错误

SELECT TOP 3 * FROM table GroupBy itemno ORDER BY saledqty DESC
更新:

如果您还需要选择其他列,那么也将它们包括在GroupBy子句中

例如:

  SELECT TOP 3 count(itemno),itemno,timestamp FROM table GroupBy itemno,timestamp ORDER BY saledqty DESC
这将有助于:

SELECT TOP 3 * FROM tbl GroupBy item_no ORDER BY saled_qty DESC

不起作用,因为您可以看到第一列和第二列的值,我有相同的项不,所以它们应该是countet together。。这就是为什么我认为也许group by可以以某种方式做到这一点。@user2834172我已经更新了我的答案,以解决您更新后的问题。非常感谢,但最后一个问题。。如果我现在只想知道cols的type=1,我该怎么做呢?哦,谢谢你的解释,这真的帮了我。。我在那里试过了,我也犯了同样的错误。但是,如果我只想选择type=1的那些,那么应该清楚该选择什么do@user2834172我已经更新了我的答案,并将在这里展开以教您更多的SQL。HAVING子句中的项必须在GROUP子句中。。。就像正在选择的项目一样。如果您不希望它们出现在那里,那么使用WHERE子句。我将为你在我的答案中添加这两个。如果你发现这个问题的答案,请将我的答案标记为正确,否则我会很快回来检查。我认为这应该可行,但还有其他我不需要的COL,但它们会产生错误。。问题更新..我认为这应该有效,但也有其他COL我不需要,但它们会产生错误。。问题已更新..timestamp'在select列表中无效,因为它未包含在聚合函数或GROUP BY子句中。但是我不需要那些其他的可乐,只需要商品号和销售数量
SELECT saledqty,itemno, no
FROM Table1
WHERE saledqty IN (
SELECT TOP 3 MAX(saledqty) As Sale
FROM Table1