请问高难度SQL,优先选择记录有关问题,用,
请教高难度SQL,优先选择记录问题,急用,在线等!
表中假如记录如下,有三列值,第一列为名称,可能存在相同,查询结果要求只能查出名称唯一记录,第三列为特殊标记,如果存在特殊标记为'zz'的记录则取该条记录,如果不存在,则取值为''的记录.
aa xx ' '
aa ww zz
bb dd ' '
cc yy ' '
cc mm zz
即希望的结果是
aa ww zz
bb dd ' '
cc mm zz
------解决方案--------------------
表中假如记录如下,有三列值,第一列为名称,可能存在相同,查询结果要求只能查出名称唯一记录,第三列为特殊标记,如果存在特殊标记为'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 @tb select N'aa',N'xx','' union all select N'aa',N'BB','' union all -- 如果有重复.... select N'aa',N'ww',N'zz' union all select N'bb',N'dd','' union all select N'cc',N'yy','' union all select 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 zz bb dd cc mm zz (3 row(s) affected) */