日期:2014-05-17  浏览次数:20474 次

MS SQL 分组求最大值的疑问
  最近在做项目时,遇到一个很奇怪的问题,求高手解释

【开发环境】
  SQL Server 2008

【问题描述】
  有2张表,结构和测试数据如下:

  表tb1                                            表tb2
  [Name] [varchar](10) NULL,          [ITEM_ID] [int] NULL,
  [ITEM_ID] [int] NULL,                     [TYPES] [int] NULL
  [Score] [nvarchar](50) NULL

  表tb1                                            表tb2
  Name   ITEM_ID  Score               ITEM_ID   TYPES                               
  张三         1             74                     1             0
  张三         1             83                     2             1
  张三         1             93
  李四         1             84
  李四         1             184
  李四         2             OK

【查询情况】
  我写了2个sql语句,一个根据ITEM_ID分组,查出最大的Score;一个根据Name分组,查出最大的Score
  1、select tb1.ITEM_ID,max(cast(tb1.Score as int))
        from tb1
        inner join tb2 on tb1.ITEM_ID=tb2.ITEM_ID
        where tb2.[TYPES]=0
        group by tb1.ITEM_ID
  语句执行正常,是我期望的结果

  2、select tb1.Name,max(cast(tb1.Score as int))
        from tb1
        inner join tb2 on tb1.ITEM_ID=tb2.ITEM_ID
        where tb2.[TYPES]=0
        group by tb1.Name
  语句执行失败,报错“在将 nvarchar 值 'OK' 转换成数据类型 int 时失败”