我正在尝试使用ROW_NUMBER OVER PARTITION
删除某些值,除非有人可以提出更好的方法,我的数据看起来像这样
create table Emp_Details
( Emp_Name varchar(10)
, Company varchar(15)
,Qty int
,LineOrderCost money
,OrderUnitCost money
,ExtraCost money
,ExtraDesc varchar(5)
)
insert into Emp_Details (Emp_Name, Company, Qty, LineOrderCost, OrderUnitCost, ExtraCost, ExtraDesc)
values
('John', 'PStock', 1, '2.50','3.50', '7.50', 'ABC')
,('John', 'PStock', 1, '2.50','3.50', '7.50', 'DEF')
我想要做的是返回两条记录,但在第二行将LineOrderCost
,OrderUnitCost
,ExtraCost
设置为0,或者所有后续行中只有2行以上在第一个之后,因此当Emp_Name
,Company
和Qty
相同但ExtraDesc不同时,会删除这些值。
如果我没有详细描述这一点,我很抱歉,但在我的脑海里,这有点道理: - )
谢谢P
答案 0 :(得分:2)
Select EMP_NAME,COMPANY,QTY, EXTRADESC,
Case when row>1 then 0 else ORDERUNITCOST end as ORDERUNITCOST,
Case when row>1 then 0 else LINEORDERCOST end as LINEORDERCOST,
Case when row>1 then 0 else EXTRACOST end as EXTRACOST
from
(Select Row_Number() Over(Partition By EMP_NAME order by EMP_NAME) as row,* from
Emp_Details) t