2014-02-27 60 views
0

假设我有如下表(实际上这是查询的结果) enter image description here选择金额只有第一部分

WHT我要的是拿出如下表

enter image description here

与它为每个代码值分配零值,除了第一个代码值。

任何策略要做到这一点?

在此先感谢

+0

什么是您查询得到这个结果是什么样子?你到目前为止尝试过什么? – NickyvV

+0

您需要金额为0吗?否则,你可以使用'按代码分组' –

回答

3

这是否帮助?

declare @tab table(
     code int, 
     amount int) 

insert into @tab values 
    (1,100), 
    (1,100), 
    (1,100), 
    (2,500), 
    (2,500), 
    (3,1000); 

    select code, 
     case when rn=1 then 
      amount 
     else 0 end amount 
    from 
(select *, 
      row_number()Over(partition by code Order by amount) RN 
     from @tab)t 
1

你可以使用row_number()确定每个code的第一行。从那里,它只是一个简单的case表达:

SELECT code, CASE rn WHEN 1 THEN amount ELSE 0 END AS amount 
FROM (SELECT code, amount, 
       ROW_NUMBER() OVER (PARTITION BY code ORDER BY amount) AS rn 
     FROM my_table) 
0

请尝试:

select Code, 
    case when ROW_NUMBER() over (partition by Code Order by Amount)=1 then Amount else 0 end Amount 
From YourTable 
+0

'按金额排序'是相当多余的,因为它们都是一样的。 – NickyvV

1

试试这个

SELECT Code,CASE When RN > 1 Then 0 Else Amount 
FROM 
(
    SELECT *,ROW_NUMBER() OVER (Partition by Code Order by (Select Null)) RN 
    FROM Table1 
) AS T 
0

请与帐户更新表以低于查询:

SELECT A.code, 
     (CASE 
      WHEN A.rno = 1 THEN B.amount 
      ELSE 0 
     END) AS amount 
FROM (SELECT Row_number() 
       OVER( 
        partition BY code 
        ORDER BY code DESC) AS rno, 
       code 
     FROM account) AS A 
     LEFT OUTER JOIN (SELECT C.code, 
           Sum(C.amount) AS amount 
         FROM account C 
         GROUP BY C.code) AS B 
        ON B.code = A.code