Sql 仅选择金额的第一部分

Sql 仅选择金额的第一部分,sql,sql-server,Sql,Sql Server,假设我有下表(实际上这是查询的结果) 我想要的是下表 除第一个代码值外,它为每个代码值的金额指定零 有什么策略可以做到这一点 提前感谢您可以使用行编号()来识别每个代码的第一行。从那时起,它只是一个简单的案例表达式: SELECT code, CASE rn WHEN 1 THEN amount ELSE 0 END AS amount FROM (SELECT code, amount, ROW_NUMBER() OVER (PARTITION BY c

假设我有下表(实际上这是查询的结果)

我想要的是下表

除第一个代码值外,它为每个代码值的金额指定零

有什么策略可以做到这一点


提前感谢

您可以使用
行编号()
来识别每个
代码的第一行。从那时起,它只是一个简单的
案例
表达式:

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)

您可以使用
row\u number()
为每个
code
标识第一行。从那时起,它只是一个简单的
案例
表达式:

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)
请尝试:

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

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

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
试试这个

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
这有用吗

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
这有用吗

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

请使用以下查询中的帐户更新表:

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 

请使用以下查询中的帐户更新表:

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 

获取此结果的查询是什么样子的?到目前为止,您尝试了什么?您需要0的金额吗?否则您可以使用
按代码分组
您的查询是什么样的?到目前为止,您尝试了什么?您需要0的金额吗?否则您可以使用
按代码分组