首页 > 解决方案 > 将值放在 SQL 数据集中的最小 ID 记录中

问题描述

我有一个表,我试图在其中获得以下结果:对于具有最低 categoryID 的成员记录,CategoryType 应设置为 0,如果该 ID 为 NULL,则应设置为 1。CategoryType 不是表中的字段,因此应通过 Case 语句添加。我使用 Row_Number() 窗口函数编写了一个脚本来组织记录,但我不确定如何将 0 设置为最低记录。我尝试使用 Min(Case) 语句,但没有奏效。

declare @t table(memberid int, lastname varchar(50), firstname varchar(50),     categoryid int)
insert into @t
values(1, 'Jones', 'Tom', 2), (1, 'Jones', 'Tom', 4),
      (2, 'Hanson', 'Ron', 3), (2, 'Hanson', 'Ron', 4),
      (2, 'Hanson', 'Ron', 5),
      (3, 'Smith', 'Jack', NULL);

这是我想要得到的结果:

MemberID     LastName    FirstName    CategoryID    CategoryType
  1           Jones        Tom            2             0
  1           Jones        Tom            4            NULL 
  2           Hanson       Ron            3             0
  2           Hanson       Ron            4            NULL
  2           Hanson       Ron            5            NULL
  3           Smith        Jack          NULL           1

标签: sqlsql-server

解决方案


我想你想要:

select t.*,
       (case when categoryid is null
             then 1
             when row_number() over (partition by memberid order by categoryid) = 1
             then 0
        end) as categorytype
from @t t;

是一个 db<>fiddle。


推荐阅读