zoukankan      html  css  js  c++  java
  • SQL取出每个产品的Top n 条记录

    1.创建表结构和数据

    创建表和数据
    Create Table Product --产品表
    (
    ProductID 
    Int Identity(1,1Primary key--产品ID
    ProductName NVarchar(100Not Null--产品名称
    ProductPrice Int Not Null--价格
    )
    GO

    Create Table ProductOrder --产品订单
    (
    OrderID 
    Int Identity(1000,1Primary key,
    ProductID 
    Int,
    Quantity 
    Int,--数量
    amount Int,--金额
    OrderDateTime DateTime Not Null --下单时间
    )
    Alter Table ProductOrder
    Add Constraint FK_ProductOrder_ProductID Foreign Key(ProductID)
    References Product(ProductID)
    GO


    Insert Into Product
    Values('黄金',389.8)

    Insert Into Product
    Values('白银',8.9)

    Insert Into ProductOrder
    Values(1,10,3890,GetDate())

    Insert Into ProductOrder
    Values(2,1000,8900,GetDate())

    Insert Into ProductOrder
    Values(1,150,389.8*150,'2012-12-21')

    Insert Into ProductOrder
    Values(1,60000,388*60000,'2011-10-1')

    Insert Into ProductOrder
    Values(2,10000,88950,GetDate())

    Insert Into ProductOrder
    Values(2,1000,8850,GetDate())

    Insert Into ProductOrder
    Values(2,4000,32850,GetDate())

    Select * from Product
    Select * from ProductOrder

    2.取出每个产品的前2条记录

       2.1 使用ROW_NUMBER() 进行排位分组

    Select T.OrderID, P.ProductName, T.Quantity, T.Amount, T.OrderDateTime
    From Product P
    Left Join 
    (
    Select Row_Number() over(Partition By ProductID Order by OrderDateTime DescAs RowID,
    OrderID, ProductID,Quantity, Amount,OrderDateTime
    From ProductOrder
    ) T 
    On T.ProductID = P.ProductID
    Where T.RowID<3

       2.2 使用Cross Apply

    Select T.OrderID, P.ProductName, T.Quantity, T.Amount, T.OrderDateTime
    From Product P
    Cross Apply
    (
    Select Top 2 * from ProductOrder O Where O.ProductID = P.ProductID
    Order By OrderDateTime Desc
    As T
  • 相关阅读:
    C#仿QQ皮肤系列之-引言
    教你打造Silverlight超酷翻页实例
    大文件上传 进度条显示 (仿csdn资源上传效果)
    Winform下的地图开发控件(GMap.NET)使用心得之二
    Web打印的解决方案之普通报表打印
    基于jQuery的表单验证插件:jValidate
    判断时间段内有几个休息期
    C++基础语法
    Web网页安全色谱
    C#仿QQ皮肤-总体层次说明(二)
  • 原文地址:https://www.cnblogs.com/chinabc/p/1980632.html
Copyright © 2011-2022 走看看