日期:2014-05-16  浏览次数:20588 次

类似行转列的问题,求解
IF EXISTS(SELECT name FROM sys.objects WHERE name = 'test')
DROP TABLE test
go
CREATE TABLE test
(
tt CHAR(4)
)
GO

INSERT INTO test (tt)
SELECT '0100' UNION ALL
SELECT '0300' UNION ALL
SELECT '0800' UNION ALL
SELECT '0200' UNION ALL
SELECT '0500' 

--另外有10个变量@t1 , @t2 , @t3 , @t4 , @t5 ,@t6 , @t7 , @t8 , @t9 , @t10
--想要将test表中的数据按照从小到大的顺序放入到这10个变量中
--test表中的笔数不定但不会超过10笔,该如何处理比较方便,不想使用游标

------解决方案--------------------
IF EXISTS(SELECT name FROM sys.objects WHERE name = 'test')
DROP TABLE test
go
CREATE TABLE test
(
tt CHAR(4)
)
GO

INSERT INTO test (tt)
SELECT '0100' UNION ALL
SELECT '0300' UNION ALL
SELECT '0800' UNION ALL
SELECT '0200' UNION ALL
SELECT '0500' 

--另外有10个变量@t1 , @t2 , @t3 , @t4 , @t5 ,@t6 , @t7 , @t8 , @t9 , @t10
--想要将test表中的数据按照从小到大的顺序放入到这10个变量中
--test表中的笔数不定但不会超过10笔,该如何处理比较方便,不想使用游标


DECLARE @t1 CHAR(4),@t2 CHAR(4),@t3 CHAR(4),@t4 CHAR(4), @t5 CHAR(4),@t6 CHAR(4),@t7 CHAR(4),@t8 CHAR(4), @t9 CHAR(4),@t10 CHAR(4)


SELECT @t1=tt FROM (SELECT id=ROW_NUMBER()OVER(ORDER BY tt),* FROM test)AS t  WHERE id=1

SELECT @t1
/*----
0100

(1 行受影响)*/