在列中查找特定匹配项,如果该 ID 没有该值,则 return null

look for a specific match in a column and return null if that id doesn't have that value

我的 table 如下所示,我想获取描述为 'T02' 的记录,否则 returns 为空。

ID 说明
D01 T01
D01 T02
D01 T03
D02 T01
D02 T03
D03 T01
D03 T02
D03 T03
D03 T04

预期结果

ID 说明


D01 T02
D02 空
D03 T02

我曾尝试使用此查询,但没有得到 D02 记录,该记录没有描述为 T02 的记录。

  select ID, Description
   where Description =
     Case 
        when Description='T02' then Description
        else NULL end

试试这个:

SELECT [ID]
      ,MAX(CASE [Description] = 'T02' THEN [Description] END) AS [Description]
FROM [my_table]
GROUP BY [ID];

使用以下格式并添加您的 Table 名称代替

SELECT 
    ID, 
    CASE 
        WHEN Description = 'T02' THEN Description
        ELSE NULL 
        END AS ModifiedDescription
FROM <table_name>

使用 CASE 和 ROW_NUMBER 函数尝试以下查询

create table #table1 (ID varchar(20), Description varchar(20))

insert into #table1 values 
 ('D01' , 'T02')
,('D01' , 'T03')
,('D02' , 'T01')
,('D02' , 'T03')
,('D03' , 'T01')
,('D03' , 'T02')
,('D03' , 'T03')
,('D03' , 'T04')


select ID, Description from (
select a.ID, case when a.Description =  'T02' then  'T02' else null end  as Description
, row_number()over(partition by a.id order by a.id, case when a.Description =  'T02' then  'T02' else null end desc) rno
from #table1 a
LEFT JOIN #table1 b on a.id =b.ID   )a where rno=1