您好我有一个包含列的表格:
saled qty, item no, no
-3, 1996-s, 149
-2, 1996-s, 150
-2, 1968-b, 151
现在我应该获得热销产品。也许我必须按项目no 分组,然后按saled qty排序,然后我可以选择前3 例如?
更新 还有其他一些我不需要的专栏,但是因为我得到了错误:
时间戳'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
差不多
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子句中。
答案 0 :(得分:0)
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(saled qty)
FROM
TABLENAME
WHERE [Item Ledger Entry Type] = 1
GROUP BY
item_no
ORDER BY
SUM(saled qty) DESC
取决于您是要进行预聚合过滤还是后聚合过滤
只需用您想要的任意数量的产品替换3。
说明: 当您按组执行分组时,只能在结果中包含列,这些列是group by子句的一部分,或者以某种方式聚合。在这里,我使用了汇总saled_qty列的SUM,并且我已经从查询中省略了所有其他列。
想到这一点的最好方法是想象你自己而不是SQL正在对数据进行分组....假设我们按item_no分组...你怎么知道如何处理所有saled_qty值?对于结果的每一行,您将有多个saled_qty值(分组子句中的每一行都有一行...在本例中为item_no)。 SQL不会让你对此产生歧义,因此会抛出错误。
答案 1 :(得分:0)
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
答案 2 :(得分:0)
它会起作用:
SELECT TOP 3 * FROM tbl GroupBy item_no ORDER BY saled_qty DESC
答案 3 :(得分:0)
SELECT saledqty,itemno, no
FROM Table1
WHERE saledqty IN (
SELECT TOP 3 MAX(saledqty) As Sale
FROM Table1