澳门金沙vipMSSQL求連續ID內數量合計-常見解決方案

–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

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

–> Title  : MSSQL求連續ID內數量合計-常見解決方案

(3 個資料列受到影響)

–> Author : wufeng4552

*/–方法2select [col1], (select max([col2])from ( select [col2]
union all select [col3] union all select [col4] union all select
[col5] union all select [col6] union all select [col7] )T where
[col2] between 20 and 60) as maxcol –指定查詢範圍from @t/*(3
個資料列受到影響)col1 maxcol———– ———–1 602 603 56*/

–> Date   : 2009-12-04

if object_id(‘tb’) is not null drop table tb

go

create table tb(ID varchar(10),Num decimal(10,2))

insert tb

select ‘001’,200.00 union all

select ‘002’,200.00 union all

select ‘003’,300.00 union all

select ‘007’,500.00 union all

select ‘008’,800.00 union all

select ‘009’,200.00 union all

select ‘012’,100.00 union all

select ‘013’,100.00 union all

select ‘014’,200.00 union all

select ‘017’,100.00 union all

select ‘018’,400.00 union all

select ‘019’,300.00

–>方法 1 臨時表

if object_id(‘tempdb..#t1’)is not null

drop table #t1

if object_id(‘tempdb..#t2’)is not null

drop table #t2

go

–取出起號

select cnt=identity(int,1,1),* into #t1 from tb t where not
exists(select 1 from tb where id=t.id-1)order by t.id

–取出止號