11

我有一个查询,它将使用 UNION ALL 将 2 个表的结果返回到 1 个表中,这一切都按我的需要工作。但是我需要在返回的数据集上运行 GROUP BY 和 ORDER BY 但是我遇到了很多错误,我不知道如何解决它。

这是我的查询:

SELECT ProductID, Quantity 
FROM BasketItems 
UNION ALL 
SELECT ProductID, Quantity 
FROM OrderItems

这将返回一个结果集,如下所示:

ProductID  Quantity  
15         2
20         2
15         1
8          5
5          1

然后我想GROUP BYProductID场上跑一个,最后ORDER BY DESC在场上跑一个Quantity。所以在最终输出中,这个特定的结果集最终会导致:

ProductID
8
15
20
5

然后我可以像往常一样在这个结果集上运行查询

编辑:

如上所述,但可能不够暗示的是,我需要对返回的结果运行查询,这不起作用,因为您无法对具有 ORDER BY 子句的一组结果运行查询(据我收集从错误列表中)

如果您想了解有关该问题的更多信息,请访问:

从这个结果集中,我想从产品表中获取与它们相关的产品

SELECT * FROM Products WHERE ID IN (
    SELECT ProductID
    FROM
    (
        SELECT ProductID, Quantity  
        FROM BasketItems  
        UNION ALL  
        SELECT ProductID, Quantity  
        FROM OrderItems 
    ) v
    GROUP BY ProductID
    ORDER BY SUM(Quantity) DESC
) 

但是,我收到此错误:ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP、OFFSET 或 FOR XML。

产品的输出需要按照子查询中返回的顺序(按数量)

4

3 回答 3

17
SELECT Products.*
FROM Products
     INNER JOIN 
(
    SELECT ProductID, Sum(Quantity) as QuantitySum
    from
    (
        SELECT ProductID, Quantity  
        FROM BasketItems  
        UNION ALL  
        SELECT ProductID, Quantity  
        FROM OrderItems 
    ) v
    GROUP BY ProductID
) ProductTotals
    ON Products.ID = ProductTotals.ProductID
ORDER BY QuantitySum DESC
于 2012-08-08T10:41:19.987 回答
2

这行得通吗?

SELECT ProductID
    from
    (
        SELECT ProductID, Quantity  
        FROM BasketItems  
        UNION ALL  
        SELECT ProductID, Quantity  
        FROM OrderItems 
    ) temp
    GROUP BY temp.ProductID
    ORDER BY SUM(temp.Quantity) desc
于 2012-08-08T10:54:38.540 回答
0

这是一个 cte 版本(没有现场测试,所以请原谅错误)

编辑

;WITH myInitialdata_cte(ProductID,Quantity)
AS
    (
    SELECT ProductID, Quantity FROM BasketItems
    UNION ALL  
    SELECT ProductID, Quantity  FROM OrderItems 
    )
SELECT b.ID
FROM 
     myInitialdata_cte a
     INNER JOIN Products b ON
         a.ProductID = b.ID
GROUP BY ProductID
ORDER BY SUM(a.Quantity) DESC
于 2012-08-08T11:05:16.817 回答