Sql server 2005 SQL Server 2005查询,将qtys更新为0,其中orderid<&燃气轮机;最小值(订单ID)

Sql server 2005 SQL Server 2005查询,将qtys更新为0,其中orderid<&燃气轮机;最小值(订单ID),sql-server-2005,Sql Server 2005,我有一张桌子 OrderID Qty ShopID ----------------------- 1 50 10 1 50 11 2 10 15 2 10 18 该人员在不同的商店订购了相同的订单(他们稍后将决定由哪一家提供),但我必须只显示每个订单的一个数量,请帮助设置订单ID相同的qty=0和shopid>min(shopid) e、 g 这只是现实世界问题的一个例子,请尝试以下方法

我有一张桌子

OrderID   Qty    ShopID
-----------------------
1         50     10
1         50     11
2         10     15
2         10     18
该人员在不同的商店订购了相同的订单(他们稍后将决定由哪一家提供),但我必须只显示每个订单的一个数量,请帮助设置订单ID相同的
qty=0
shopid>min(shopid)

e、 g


这只是现实世界问题的一个例子,请尝试以下方法:

;WITH CTE AS
(
    SELECT 
        OrderID, Qty, ShopID,
        RowNum = ROW_NUMBER() OVER (PARTITION BY OrderID ORDER BY ShopID DESC)
    FROM
        dbo.YourOrderTableHere
)
SELECT
    OrderID,
    OrderedQty = CASE RowNum    
                    WHEN 1 THEN Qty ELSE 0 
                 END,
    ShopID
FROM CTE    
基本上,我通过
OrderID
对数据进行“分区”——这样给定顺序中的每一行都会被分配一个连续的
RowNum

在从CTE中选择(公共表表达式)中,我返回存储在表中的数量,用于
RowNum=1
的订单,并且我抑制该数量,并为相同
OrderID
的所有其他行返回0

这给了我一个输出:

;WITH CTE AS
(
    SELECT 
        OrderID, Qty, ShopID,
        RowNum = ROW_NUMBER() OVER (PARTITION BY OrderID ORDER BY ShopID DESC)
    FROM
        dbo.YourOrderTableHere
)
SELECT
    OrderID,
    OrderedQty = CASE RowNum    
                    WHEN 1 THEN Qty ELSE 0 
                 END,
    ShopID
FROM CTE