--测试数据
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 行)
*/
[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 行)
xueguang(xg):语句简单,一看就懂。谢谢两位的回复