Title:Generatingtestdata-->Author:wufeng4552-->Date:2009-10-1609:58:16ifnotobject_id('Tempdb..#t')isnulldro" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL SERVER多列取最大或者最小值

系統(tǒng) 2167 0

/*

lvl1? lvl2??? lvl3??? lvl4??? lvl
4????? 3????? 4????? 1???????
3????? 2????? 2????? 1???
2????? 2????? 3????? 4
4????? 4????? 3????? 4
3????? 1????? 2????? 2
怎么寫代碼 去比較lvl1、lvl2、lvl3、lvl4 對應(yīng)每行的值,取其中最小的,將其值添加到lvl列里
運行結(jié)果應(yīng)該是
lvl
1
1
2
3
1

*/

--方法(一) 函數(shù)法

-->Title:Generating test data
-->Author:wufeng4552
-->Date :2009-10-16 09:58:16

if not object_id('Tempdb..#t') is null
??? drop table #t
Go
Create table #t([lvl1] int,[lvl2] int,[lvl3] int,[lvl4] int,[lvl] int)
Insert #t
select 4,3,4,1,null union all
select 3,2,2,1,null union all
select 2,2,3,4,null union all
select 4,4,3,4,null union all
select 3,1,2,2,null
Go
if object_id('UF_minget')is not null drop function UF_minget
go
create function UF_minget
(@col1 int,@col2 int,@col3 int,@col4 int)
returns int
as
? begin
???? declare @t table(col int)
???? insert @t select @col1 union all
?????????????? select @col2 union all
?????????????? select @col3 union all
?????????????? select @col4
???? return(select min(col)from @t)
? end
go
update t set [lvl]=dbo.UF_minget([lvl1],[lvl2],[lvl3],[lvl4])
from #t t
select * from #t
/*
lvl1??????? lvl2??????? lvl3??????? lvl4??????? lvl
----------- ----------- ----------- ----------- -----------
4?????????? 3?????????? 4?????????? 1?????????? 1
3?????????? 2?????????? 2?????????? 1?????????? 1
2?????????? 2?????????? 3?????????? 4?????????? 2
4?????????? 4?????????? 3?????????? 4?????????? 3
3?????????? 1?????????? 2?????????? 2?????????? 1

(5 個資料列受到影響)


*/

--方法二? MSSQL2005 XML PATH

-------------------------------------
--? Author : liangCK 梁愛蘭
--? Comment: 小梁 愛 蘭兒
--? Date?? : 2009-10-16 09:57:38
-------------------------------------

--> 生成測試數(shù)據(jù): @T
DECLARE @T TABLE (lvl1 int,lvl2 int,lvl3 int,lvl4 int,lvl int)
INSERT INTO @T
SELECT 4,3,4,1,null UNION ALL
SELECT 3,2,2,1,null UNION ALL
SELECT 2,2,3,4,null UNION ALL
SELECT 4,4,3,4,null UNION ALL
SELECT 3,1,2,2,null

--SQL查詢?nèi)缦?

UPDATE A SET
??? lvl = B.x.value('min(//row/*)','int')
FROM @T AS A
??? CROSS APPLY (SELECT x = (SELECT A.* FOR XML PATH('row'),TYPE)) AS B;
???
SELECT * FROM @T;

/*
lvl1??????? lvl2??????? lvl3??????? lvl4??????? lvl
----------- ----------- ----------- ----------- -----------
4?????????? 3?????????? 4?????????? 1?????????? 1
3?????????? 2?????????? 2?????????? 1?????????? 1
2?????????? 2?????????? 3?????????? 4?????????? 2
4?????????? 4?????????? 3?????????? 4?????????? 3
3?????????? 1?????????? 2?????????? 2?????????? 1

(5 行受影響)

*/
--方法(三) 作者 (四方城)

if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([lvl1] int,[lvl2] int,[lvl3] int,[lvl4] int,[lvl] int)
insert [tb]
select 4,3,4,1,null union all
select 3,2,2,1,null union all
select 2,2,3,4,null union all
select 4,4,3,4,null union all
select 3,1,2,2,null
go

create function getmin(@a varchar(8000))??
? returns int??
? as??
? begin declare @ table (id int identity,a char(1))??
????? declare @t int??
????? insert @ select top 8000 null from sysobjects a,sysobjects b??
????? select @t=min(cast(substring(','+@a,id+1,charindex(',',','+@a+',',id+1)-id-1) as int))??
????? from @ where substring(','+@a,id,8000) like ',_%'??
????? return @t??
? end??
go

-->查詢
select
? lvl1,
? lvl2,
? lvl3,
? lvl4,
? lvl=dbo.getmin(ltrim(lvl1)+','+ltrim(lvl2)+','+ltrim(lvl3)+','+ltrim(lvl4))
from tb

/**
lvl1??????? lvl2??????? lvl3??????? lvl4??????? lvl
----------- ----------- ----------- ----------- -----------
4?????????? 3?????????? 4?????????? 1?????????? 1
3?????????? 2?????????? 2?????????? 1?????????? 1
2?????????? 2?????????? 3?????????? 4?????????? 2
4?????????? 4?????????? 3?????????? 4?????????? 3
3?????????? 1?????????? 2?????????? 2?????????? 1

(5 行受影響)
**/

--方法(四)

-->Title:Generating test data
-->Author:wufeng4552
-->Date :2009-10-16 09:58:16

if not object_id('Tempdb..#t') is null
??? drop table #t
Go
Create table #t([lvl1] int,[lvl2] int,[lvl3] int,[lvl4] int,[lvl] int)
Insert #t
select 4,3,4,1,null union all
select 3,2,2,1,null union all
select 2,2,3,4,null union all
select 4,4,3,4,null union all
select 3,1,2,2,null
Go

if object_id('UF_minget')is not null drop function UF_minget
go
create function UF_minget
(@s varchar(200))
returns int
as
? begin
? return(
??? select col=min(substring(@s,number,charindex(',',@s+',',number)-number))
??? from master..spt_values
??? where type='p' and number<=len(@s+'a') and charindex(',',','+@s,number)=number)
? end
go
select
? [lvl1],
? [lvl2],
? [lvl3],
? [lvl4],
? [lvl]=dbo.UF_minget(ltrim([lvl1])+','+ltrim([lvl2])+','+ltrim([lvl3])+','+ltrim([lvl4]))
from #T
/*
lvl1??????? lvl2??????? lvl3??????? lvl4??????? lvl
----------- ----------- ----------- ----------- -----------
4?????????? 3?????????? 4?????????? 1?????????? 1
3?????????? 2?????????? 2?????????? 1?????????? 1
2?????????? 2?????????? 3?????????? 4?????????? 2
4?????????? 4?????????? 3?????????? 4?????????? 3
3?????????? 1?????????? 2?????????? 2?????????? 1

*/

--方法(五)

-->Title:Generating test data
-->Author:wufeng4552
-->Date :2009-10-16 09:58:16
if not object_id('Tempdb..#t') is null
??? drop table #t
Go
Create table #t([lvl1] int,[lvl2] int,[lvl3] int,[lvl4] int,[lvl] int)
Insert #t
select 4,3,4,1,null union all
select 3,2,2,1,null union all
select 2,2,3,4,null union all
select 4,4,3,4,null union all
select 3,1,2,2,null
Go
select [lvl1],
?????? [lvl2],
?????? [lvl3],
?????? [lvl4],
?????? [lvl]=(select min([lvl1])
????????????? from (select [lvl1]
????????????????? union all select [lvl2]
????????????????? union all select [lvl3]
????????????????? union all select [lvl4])T)
from #t
/*
lvl1??????? lvl2??????? lvl3??????? lvl4??????? lvl
----------- ----------- ----------- ----------- -----------
4?????????? 3?????????? 4?????????? 1?????????? 1
3?????????? 2?????????? 2?????????? 1?????????? 1
2?????????? 2?????????? 3?????????? 4?????????? 2
4?????????? 4?????????? 3?????????? 4?????????? 3
3?????????? 1?????????? 2?????????? 2?????????? 1

(5 個資料列受到影響)
*/

?

轉(zhuǎn)載: http://blog.csdn.net/navy887/archive/2009/10/16/4682433.aspx

SQL SERVER多列取最大或者最小值


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 福利视频在线观看午夜 | 只有精品| 污夜影院| 国产在线一区二区三区 | aaaaaaa毛片 | 午夜精品久久久久久久爽 | 日本一级做人免费视频 | 久久久国产精品免费视频 | 一级黄色毛片子 | 国产一区二区免费在线观看 | 久热精品视频在线 | 91大神在线精品视频一区 | 欧洲黄色网| 91成年人视频 | 久久不雅视频 | 热久久国产 | 欧美最大成人毛片视频网站 | 免费一级欧美片在线观免看 | 一级毛片中文字幕 | 欧美精品亚洲网站 | 亚洲最大在线 | 色综合久久夜色精品国产 | 不卡神马影院 | 久久大香香蕉国产免费网站 | 欧美一级毛片免费高清的 | 久久久精品 | 美女18毛片免费视频 | 国产成人91高清精品免费 | 国产成人乱码一区二区三区 | 久久婷婷网 | 欧美日本综合一区二区三区 | 一级毛片www | 亚洲精品中文字幕乱码三区一二 | 欧美日韩高清一区二区三区 | 亚洲合集综合久久性色 | 青青成人 | 日本一级一片免费 | 欧美激情在线播放一区二区 | 久久精品免看国产 | 精品久久久久久国产91 | 亚洲乱视频 |