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

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 1902 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

*/

--方法(一) 函數法

-->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
-------------------------------------

--> 生成測試數據: @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多列取最大或者最小值


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久草福利网 | 欧美中文字幕一区二区 | 看亚洲a级一级毛片 | 亚洲午夜成激人情在线影院 | 美女国产网站 | 亚洲性猛交xx乱 | 亚洲国产精品视频一区 | 国产一二三区精品 | 欧美黄色第一页 | 热er99久久6国产精品免费 | 人人综合网| 成人av播放 | 久久久91精品国产一区二区三区 | 日本不卡高清免费 | 日韩啊v | 一区二区三区回区在观看免费视频 | 成人在线观看av | 日本阿v视频高清在线 | 天天摸天天操免费播放小视频 | 亚洲一区二区三区视频 | 波多野吉衣 免费一区 | 色鬼久久 | 天天插天天舔 | 九九久久精品这里久久网 | 神马久久久久久久久 | 久久免费看少妇高潮A片JA | 狠狠色噜噜狠狠狠狠米奇777 | 一区二区三区国产好 | 日本午夜在线 | 91情侣在线偷精品国产 | 欧美成人xxxx | 久久y| 欧美精品国产第一区二区 | 国产一级做a爰片久久毛片 欧美一区欧美二区 | 欧美成a高清在线观看www | 日韩欧美视频一区 | 三a级片| 久久99国产精品 | 国产精品999 | 最全精品自拍视频在线 | 成人无码T髙潮喷水A片小说 |