SQL2000编号排列问题_MSSQL_编程问答 问题: SQL2000编号排列问题

解决方案1:

/*
SQL Server2000 不支持 row_number,只能多转几个弯了
*/
USE tempdb
GO
if not object_id(N'Tempdb..T') is null
    drop table T
Go
Create table T([ID] int)
SET NOCOUNT ON
Insert T
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 7 union all
select 8 UNION ALL
select 10
GO
DECLARE @cnt INT
SELECT @cnt=COUNT(0) FROM t
DECLARE @t1 TABLE(id INT)
DECLARE @t2 TABLE(id INT)
INSERT INTO @t1(id)
SELECT TOP (@cnt/2) id FROM T ORDER BY t.ID 
INSERT INTO @t2(id)
SELECT TOP (@cnt-@cnt/2) id FROM T 
WHERE t.id NOT IN (SELECT id FROM @t1)
ORDER BY t.ID 
SELECT t1.id,t2.id FROM 
(SELECT *,(select count(*) from @t1 b  where a.id >= b.id) AS rid FROM @t1 AS a) AS t1
FULL JOIN
(SELECT *,(select count(*) from @t2 b  where a.id >= b.id) AS rid FROM @t2 AS a) AS t2
ON t1.rid=t2.rid
/*
id          id
----------- -----------
1           5
2           6
3           7
4           8
NULL        10
*/

解决方案2:


--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int)
Insert #T
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 7 union all
select 8
Go
--测试数据结束
--1、
;WITH ctea AS (
Select *,ROW_NUMBER()OVER(ORDER BY GETDATE()) AS num from #T 
),cteb AS (
Select *,ROW_NUMBER()OVER(ORDER BY GETDATE()) AS rn from ctea WHERE num<=((SELECT COUNT(1) FROM ctea)/2)
),ctec AS (
Select *,ROW_NUMBER()OVER(ORDER BY GETDATE()) AS rn from ctea WHERE num>((SELECT COUNT(1) FROM ctea)/2)
)
SELECT cteb.ID,ctec.ID FROM cteb FULL JOIN ctec ON cteb.rn = ctec.rn

 SQL2000编号排列问题
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int)
Insert #T
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 7 union all
select 8
Go
--测试数据结束
--2、
;WITH ctea AS (
Select *,ROW_NUMBER()OVER(ORDER BY GETDATE()) AS num from #T WHERE ID%2=1
),cteb AS (
Select *,ROW_NUMBER()OVER(ORDER BY GETDATE()) AS num from #T WHERE ID%2=0
)
SELECT ctea.ID,cteb.ID FROM ctea FULL JOIN cteb ON cteb.num = ctea.num

 SQL2000编号排列问题

上一篇sql统计查询问题
下一篇求个关于库龄分析的算法
明星图片
相关文章
《 SQL2000编号排列问题》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)