表中假如记录如下,有三列值,第一列为名称,可能存在相同,查询结果要求只能查出名称唯一记录,第三列为特殊标记,如果存在特殊标记为'zz'的记录则取该条记录,如果不存在,则取值为''的记录.
aa xx ' '
aa ww zz
bb dd ' '
cc yy ' '
cc mm zz
即希望的结果是
aa ww zz
bb dd ' '
cc mm zz
------解决方案--------------------
- SQL code
-->生成测试数据 declare @tb table([col] nvarchar(2),[col2] nvarchar(2),[col3] nvarchar(2))Insert @tbselect N'aa',N'xx','' union allselect N'aa',N'BB','' union all -- 如果有重复....select N'aa',N'ww',N'zz' union allselect N'bb',N'dd','' union allselect N'cc',N'yy','' union allselect N'cc',N'mm',N'zz'Select t.[col],min(t.[col2]) as [col2],t.[col3] from @tb t where col3 = (select case when max(col3)='zz' then 'zz' else '' end from @tb where [col] = t.[col])group by t.[col],t.[col3]order by t.[col]/*col col2 col3---- ---- ----aa ww zzbb dd cc mm zz(3 row(s) affected)*/