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