sql - 将值放在 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
解决方案
我想你想要:
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。
推荐阅读
- php - 我需要 PHP 中的数学解决方案或编程解决方案
- php - 如何创建具有自身值的变量+另一个变量
- android - 多个 Java Fragment 使用的 Asynctask
- ruby-on-rails - Rails has_many OR 条件
- java - 从 Java 中的字符串获取子字符串(Android)
- android - 如何在Android中以分贝而不是百分比的响度产生声音?
- twitter-bootstrap - 关于将 Vaadin 与 bootstrap 或 Popper 工具提示集成的任何想法?
- python - 包含 tf.Session().run() 的函数变得越来越慢
- asp.net - 在 Asp.Net MVC 和 EF 中的多个并发请求期间防止竞争条件
- scala - 在 Scala 中使用 Slick 进行更新插入