在列中查找特定匹配项,如果该 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
我的 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