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

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

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

系統(tǒng) 1795 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 對應每行的值,取其中最小的,將其值添加到lvl列里
運行結果應該是
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查詢如下:

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 個資料列受到影響)
*/

?

轉載: http://blog.csdn.net/navy887/archive/2009/10/16/4682433.aspx

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91亚洲国产三上悠亚在线 | 九九热视频在线 | www.日韩视频 | 国产精品合集久久久久青苹果 | 久操热久操| 四虎色姝姝影院www 四虎色影院 | 九九在线偷拍视频在线播放 | 亚洲人成激情在线播放 | 国产精选自拍 | 亚洲精品一区二区三区美女 | 毛片免费在线视频 | 国内精品久久久久久久aa护士 | 波多野结衣中文字幕久久 | 国产99久久九九精品免费 | 99久久成人国产精品免费 | 亚洲 欧美 中文字幕 | 亚洲最大的成人网 | a一级免费视频 | 久久精品在现线观看免费15 | 国产伦精品一区二区三区女 | 欧美特欧美特级一片 | a级做人爱免费播放 | 一级特黄a视频 | 国产免费一级高清淫日本片 | 九九视频国产 | 国产a级网站 | 日韩精品亚洲人成在线观看 | 欧美激情精品久久久久久大尺度 | 国产精品高清全国免费观看 | 天天爱天天爽 | 日本免费一区尤物 | 免费播放国产性色生活片 | 中国一级毛片在线观看 | 久久se精品一区二区影院 | 热久久最新视频 | 国产成人a在一区线观看高清 | 亚洲综合成人网在线观看 | 美女叫春| 亚洲精品色婷婷在线影院麻豆 | 亚洲欧美一区二区三区在饯 | 精品无人区乱码1区2区3区免费 |