1

除非有人可以提出更好的方法,否则我正在尝试使用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,CompanyQty相同但 ExtraDesc 是不同的空白出所描述的那些值。

如果我没有很好地描述这一点,我深表歉意,但在我的脑海中它有某种意义:-)

谢谢P

4

1 回答 1

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

Sql 小提琴演示

于 2013-05-08T11:06:21.357 回答