一个奇怪的查询问题
CREATE   TABLE   [dbo].[A]   ( 
 	[Type]   [varchar]   (10)   COLLATE   Chinese_PRC_CI_AI   NULL   , 
 	[id]   [int]   NULL   , 
 	[name]   [varchar]   (10)   COLLATE   Chinese_PRC_CI_AI   NULL    
 )   ON   [PRIMARY] 
 GO     
 INSERT   A 
 SELECT    'A ',4, 'Z '   UNION   ALL 
 SELECT    'A ',5, 'X '   UNION   ALL 
 SELECT    'B ',4, 'Q '   UNION   ALL 
 SELECT    'B ',5, 'W '   UNION   ALL 
 SELECT    'C ',4, 'Y '   UNION   ALL 
 SELECT    'D ',4, 'U '      
 SELECT   TYPE,NAME=MAX(ISNULL(CASE   WHEN   ID= '4 '   THEN   NAME   END,CASE   WHEN   ID= '5 'THEN   NAME   END)) 
 FROM   A    
 GROUP   BY   TYPE 
 ORDER   BY   TYPE   
 上面的语句为什么得到的不是下面的结果?   
 -------------------- 
 TYPE            NAME 
 A	Z 
 B	Q 
 C	Y 
 D	U
------解决方案--------------------因为 W  >   Q
------解决方案--------------------规则是什么
------解决方案--------------------我们来看B这一组 
  'B ',4, 'Q ' 对应的isnull(……) = Q 
  'B ',5, 'W ' 对应的isnull(……) = W   
 然后再max,当然就是W了 
------解决方案--------------------declare @A TABLE( 
 	[Type] [varchar] (10) COLLATE Chinese_PRC_CI_AI NULL , 
 	[id] [int] NULL , 
 	[name] [varchar] (10) COLLATE Chinese_PRC_CI_AI NULL  
 )      
 INSERT @A 
 SELECT  'A ',4, 'Z ' UNION ALL 
 SELECT  'A ',5, 'X ' UNION ALL 
 SELECT  'B ',4, 'Q ' UNION ALL 
 SELECT  'B ',5, 'W ' UNION ALL 
 SELECT  'C ',4, 'Y ' UNION ALL 
 SELECT  'D ',4, 'U '    
 SELECT TYPE,NAME=MAX(NAME) 
 FROM @A  
 GROUP BY TYPE 
 ORDER BY TYPE   
 --结果 
 TYPE       NAME        
 ---------- ----------  
 A          Z 
 B          W 
 C          Y 
 D          U   
 (所影响的行数为 4 行)   
 --搂主列出的结果是错的 
------解决方案--------------------估计楼主的要求是有4就选择4 没有4就选择5   
 declare @A TABLE( 
 	[Type] [varchar] (10) COLLATE Chinese_PRC_CI_AI NULL , 
 	[id] [int] NULL , 
 	[name] [varchar] (10) COLLATE Chinese_PRC_CI_AI NULL  
 )      
 INSERT @A 
 SELECT  'A ',4, 'Z ' UNION ALL 
 SELECT  'A ',5, 'X ' UNION ALL 
 SELECT  'B ',4, 'Q ' UNION ALL 
 SELECT  'B ',5, 'W ' UNION ALL 
 SELECT  'C ',4, 'Y ' UNION ALL 
 SELECT  'D ',5, 'U '    
 SELECT TYPE,NAME 
 FROM @A a 
 where id=4 or ( 
 id=5 and not exists ( 
 select 1 from @A  
 where type=a.type 
 and id=4 
 ) 
 )   
 --结果 
 -------------------- 
 TYPE    NAME 
 A	Z 
 B	Q 
 C	Y 
 D	U   
------解决方案--------------------SELECT TYPE,NAME=isnull(MAX(case id when 4 then name end),MAX(case id when 5 then name end)) 
 FROM A  
 GROUP BY TYPE 
 ORDER BY TYPE