MSSQL 多字段根据范围求最大值实现方法

时间:2020-03-11 20:20来源:计算机教程
--Title:生成測試數據--Author:wufeng4552--Date :2009-09-2115:08:41declare @T table([Col1] int,[Col2] int,[Col3] int,[Col4]int,[Col5] int,[Col6] int,[Col7] int)Insert @Tselect1,10,20,30,40,50,60 union allselect 2,60,30,45,20,52,85 union

--Title:生成測試數據--Author:wufeng4552--Date :2009-09-21 15:08:41declare @T table([Col1] int,[Col2] int,[Col3] int,[Col4] int,[Col5] int,[Col6] int,[Col7] int)Insert @Tselect 1,10,20,30,40,50,60 union allselect 2,60,30,45,20,52,85 union allselect 3,87,56,65,41,14,21--方法1select [col1], max([col2])maxcolfrom(select [col1],[col2] from @t union all select [col1],[col3] from @t union all select [col1],[col4] from @t union all select [col1],[col5] from @t union all select [col1],[col6] from @t union all select [col1],[col7] from @t)Twhere [col2] between 20 and 60 --條件限制group by [col1]/*col1 maxcol----------- -----------1 602 603 56

vnsc5858威尼斯城官网 1use test
vnsc5858威尼斯城官网 2go
vnsc5858威尼斯城官网 3if object_id('Tempdb..#T') is not null
vnsc5858威尼斯城官网 4    drop table #T
vnsc5858威尼斯城官网 5vnsc5858威尼斯城官网,create table #T(ID int,Name nvarchar(100),parentID int)
vnsc5858威尼斯城官网 6insert #T select 1,'A',0
vnsc5858威尼斯城官网 7insert #T select 2,'B',1
vnsc5858威尼斯城官网 8insert #T select 3,'C',1
vnsc5858威尼斯城官网 9insert #T select 4,'D',3
vnsc5858威尼斯城官网 10insert #T select 5,'E',2
vnsc5858威尼斯城官网 11
vnsc5858威尼斯城官网 12go
vnsc5858威尼斯城官网 13
vnsc5858威尼斯城官网 14with t2(ID,Name,parentID,Ord,Lev)
vnsc5858威尼斯城官网 15as
vnsc5858威尼斯城官网 16(select *,Ord=cast(right('0000' rtrim(ID),4) as nvarchar(max)),Lev=cast(0 as int) from #T where ParentID=0
vnsc5858威尼斯城官网 17union all
vnsc5858威尼斯城官网 18select b.*,Ord=a.Ord cast(right('0000' rtrim(b.ID),4) as nvarchar(max)),Lev=cast(a.Lev 1 as int)from #T b join t2  a on b.ParentID=a.ID
vnsc5858威尼斯城官网 19)
vnsc5858威尼斯城官网 20select 顯示=replicate(char(9),lev) Name from T2 order by ord option(maxrecursion 0)--用空格替換制表符時用space(lev*2)/replicate(char(9),lev)
vnsc5858威尼斯城官网 21
vnsc5858威尼斯城官网 22vnsc5858威尼斯城官网 23/**//*
vnsc5858威尼斯城官网 24顯示
vnsc5858威尼斯城官网 25---------------------------------
vnsc5858威尼斯城官网 26A
vnsc5858威尼斯城官网 27  B
vnsc5858威尼斯城官网 28    E
vnsc5858威尼斯城官网 29  C
vnsc5858威尼斯城官网 30    D
vnsc5858威尼斯城官网 31
vnsc5858威尼斯城官网 32(5 個資料列受到影響)
vnsc5858威尼斯城官网 33*/
vnsc5858威尼斯城官网 34
vnsc5858威尼斯城官网 35
vnsc5858威尼斯城官网 36;with t2
vnsc5858威尼斯城官网 37as
vnsc5858威尼斯城官网 38(select *,Ord=cast(Name as nvarchar(max)),lev=0 from #T where ParentID=0
vnsc5858威尼斯城官网 39union all
vnsc5858威尼斯城官网 40select b.*,Ord=cast(a.Ord char(9) b.Name as nvarchar(max)),a.lev 1 from #T b join t2  a on b.ParentID=a.ID 
vnsc5858威尼斯城官网 41)
vnsc5858威尼斯城官网 42select 
vnsc5858威尼斯城官网 43    [顯示]=Ord 
vnsc5858威尼斯城官网 44from 
vnsc5858威尼斯城官网 45    T2
vnsc5858威尼斯城官网 46order by ord 
vnsc5858威尼斯城官网 47option(maxrecursion 0)
vnsc5858威尼斯城官网 48vnsc5858威尼斯城官网 49/**//*
vnsc5858威尼斯城官网 50
vnsc5858威尼斯城官网 51顯示
vnsc5858威尼斯城官网 52--------------------
vnsc5858威尼斯城官网 53A
vnsc5858威尼斯城官网 54A    B
vnsc5858威尼斯城官网 55A    B    E
vnsc5858威尼斯城官网 56A    C
vnsc5858威尼斯城官网 57A    C    D
vnsc5858威尼斯城官网 58
vnsc5858威尼斯城官网 59(5 個資料列受到影響)
vnsc5858威尼斯城官网 60
vnsc5858威尼斯城官网 61*/
vnsc5858威尼斯城官网 62
vnsc5858威尼斯城官网 63--2005多次调用连接时:
vnsc5858威尼斯城官网 64vnsc5858威尼斯城官网 65/**//*
vnsc5858威尼斯城官网 66;with T(COl)--可指定列名也可不指定
vnsc5858威尼斯城官网 67as
vnsc5858威尼斯城官网 68(......)
vnsc5858威尼斯城官网 69,T2(Co)
vnsc5858威尼斯城官网 70as
vnsc5858威尼斯城官网 71(......)
vnsc5858威尼斯城官网 72select * from T1 a join T2 b on a.Col=b.COl
vnsc5858威尼斯城官网 73*/
vnsc5858威尼斯城官网 74
vnsc5858威尼斯城官网 75
vnsc5858威尼斯城官网 76

(3 個資料列受到影響)

编辑:计算机教程 本文来源:MSSQL 多字段根据范围求最大值实现方法

关键词: