繁体   English   中英

SQL Server查询以选择最高数量的数据行

[英]SQL Server query to select the highest quantity data row

我一直试图找到类似的案例。 我找到了很多东西,但我仍然无法弄清楚采用我的查询。

我在SQL Server中有一个有3个表的testDB,如下图所示:

表结构

我创建了如下查询:

SELECT P.FirstName,
        P.LastName,
        O.ProductType, 
        PO.ProductName,
        PO.Quantity 
FROM Persons AS P
INNER JOIN Orders AS O ON P.PersonID = O.PersonID 
INNER JOIN ProductOrders AS PO ON PO.OrderID = O.OrderID;

当前结果,它显示了ProductOrders的所有记录。 见下图:

目前的结果

我想要的结果只显示每个人名只有最高数量的记录。 我的预期结果如下图所示:

预期结果

非常感谢您的帮助。

SQL Server有TOP WITH TIES / ROW_NUMBER()技巧,非常优雅:

SELECT TOP (1) WITH TIES P.FirstName, P.LastName, O.ProductType, PO.ProductName, PO.Quantity 
FROM Persons P INNER JOIN
     Orders O
     ON P.PersonID = O.PersonID INNER JOIN
     ProductOrders PO
     ON PO.OrderID = O.OrderID
ORDER BY ROW_NUMBER() OVER (PARTITION BY P.PersonId, P.ProductType ORDER BY PO.Quantity DESC);

使用窗口功能:

SELECT distinct P.FirstName
            , P.LastName
            , O.ProductType
            , first_value(O.ProductName) OVER (Partition By P.FirstName, P.LastName, O.ProductType Order by PO.Quantity desc) as [Productname]
            , max(PO.Quantity) OVER (Partition By P.FirstName, P.LastName, O.ProductType) as [Quantity]
FROM Persons AS P 
INNER JOIN Orders AS O ON P.PersonID = O.PersonID 
INNER JOIN ProductOrders AS PO ON PO.OrderID = O.OrderID;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM