--测试数据
CREATE TABLE #T(F1 VARCHAR(10),F2 INT,F3 INT,F4 INT)INSERT #T SELECT '一类',3,5,3
INSERT #T SELECT '二类',5,3,4
INSERT #T SELECT '三类',4,2,1
INSERT #T SELECT '四类',1,2,3
INSERT #T SELECT '五类',3,3,3
SELECT F1,F2,F3,F4,CASE WHEN F2>=F3 AND F2>=F4 THEN F2 WHEN F3>=F2 AND F3>=F4 THEN F3 ELSE F4 END 最大,CASE WHEN F2>=F3 AND F2>=F4 THEN 'F2' WHEN F3>=F2 AND F3>=F4 THEN 'F3' ELSE 'F4' END 最大项目  FROM #T
/*结果
F1         F2          F3          F4          最大          最大项目 
---------- ----------- ----------- ----------- ----------- ---- 
一类         3           5           3           5           F3
二类         5           3           4           5           F2
三类         4           2           1           4           F2
四类         1           2           3           3           F4
五类         3           3           3           3           F2(所影响的行数为 5 行)
*/

解决方案 »

  1.   

    /*---------------创建测试环境,去掉[create]的方括号---------------------------*/
    [create] table t
    (F1 varchar(20),F2 int,F3 int,F4 int)insert t values ('一类',3,5,3)
    insert t values ('二类',5,3,4)
    insert t values ('三类',4,2,1)
    insert t values ('四类',1,2,3)
    insert t values ('五类',3,3,3)
    go
    /*----------------创建函数来合并-----------------------*/
    create function f_he(@col varchar(20),@col1 int)
    returns varchar(20)
    as
    begin
    declare @sql varchar(20)
    set @sql=''
    if @col1=0
    begin
    select @sql=@sql+','+parsename(b.col,1) from
    (
    select f1,cast(max(col) as varchar) as col from
    (
    select f1,f2 col from t
    union all
    select f1,f3 from t
    union all
    select f1,f4 from t
    ) a 
    group by f1) a
    inner join
    (
    select f1,col as col from
    (
    select f1,cast(f2 as varchar)+'.f2' as col from t
    union all
    select f1,cast(f3 as varchar)+'.f3' from t
    union all
    select f1,cast(f4 as varchar)+'.f4' from t
    ) a) b on a.f1=b.f1 and a.col=parsename(b.col,2)
    where a.f1=@col
    select @sql=stuff(@sql,1,1,'')
    end
    else
    begin
      set @sql=''
    select @sql=max(col) from
    (
    select f1,cast(f2 as varchar) as col from t
    union all
    select f1,cast(f3 as varchar) from t
    union all
    select f1,cast(f4 as varchar) from t
    ) a where f1=@col
    group by f1
    end
    return(@sql)
    end
    go/*-------------执行查询语句--------------------*/
    select *,dbo.f_he(f1,1) as 最大值,dbo.f_he(f1,0) as 最大项目 from t/*---------------删除环境--------------*/
    drop function f_he
    drop table t
    /*----------------查询结果---------------*/
    F1                   F2          F3          F4          最大值                  最大项目                 
    -------------------- ----------- ----------- ----------- -------------------- -------------------- 
    一类                   3           5           3           5                    f3
    二类                   5           3           4           5                    f2
    三类                   4           2           1           4                    f2
    四类                   1           2           3           3                    f4
    五类                   3           3           3           3                    f2,f3,f4(所影响的行数为 5 行)
      

  2.   

    samfeng_2003(风云) :在下写SQL不久,还不是很看得懂大哥的语句。不过已保留,以后慢慢研究。
    xueguang(xg):语句简单,一看就懂。谢谢两位的回复