SQL 服务器,子集 a table 并根据条件创建新列

SQL Server, subset a table and create new column based on condition

如果我在 SQL 中有一个 table 作为:

id code
1 6
1 8
1 4
2 3
2 7
2 4
3 7
3 6
3 7

我需要做的,逻辑上是:

  1. 按id分组时获取每组的第一行,按code排序
  2. 创建一个新列以显示代码列是否在组内的任何位置包含 7

想要的结果:

id code c7
1 4 N
2 3 Y
3 6 Y

我认为 SELECT 中需要一个“CASE WHEN”语句,但还没有解决。我可以执行什么查询来获取此信息?

您似乎可以使用 MIN 和条件聚合:

SELECT id,
       MIN(Code) AS Code,
       CASE WHEN COUNT(CASE code WHEN 7 THEN 1 END) > 0 THEN 'Y' ELSE 'N' END AS C7
FROM dbo.YourTable
GROUP BY id;

可能有更好的方法来做到这一点,但我想到的是,首先您必须根据该标准对 table 进行分区以获得最上面的那个,然后再加入自己找到带有 7

的那些
declare @table1 table (id int not null, code int not null)

insert into @table1 (id, code)
values
(1,6),
(1,8),
(1,4),
(2,3),
(2,7),
(2,4),
(3,7),
(3,6),
(3,7)

select id, code, c7
from (
    select t.id ,t.code
        ,(CASE WHEN c.id is null then 'N' else 'Y' END) as c7
        ,ROW_NUMBER() OVER (PARTITION BY t.id order by t.code) AS p 
    from @table1 t
        left outer join (
            select id, code, 'Y' as c7
            from @table1
            where code = 7) c on c.id = t.id
    ) sorted
where sorted.p = 1