2016-08-05 57 views
0

我试图输出值基于一个名为DisplayOrder列包含了像值:如何在另一个表中按位置排序小数列?

1.1 
1.2 
2.3 
2.1 
2.2 
5.2 
5.3 
5.1 

我需要输出基于它的这些数字是在具有值不是为了像这样的另一个表中的位置:

2 
5 
1 

,我想输出的在第二表中的位置顺序在顶部表中的值,但在十进制值的顺序如下所示:

2.1 
2.2 
2.3 
5.1 
5.2 
5.3 
1.1 
1.2 

到目前为止,我试图插入到一个临时表,其中数字的所述第一部分是在该顺序​​:

INSERT INTO #Temp 
SELECT DisplayOrder 
FROM Questions 
WHERE DisplayOrder LIKE @Search 

上面的代码循环表2其中分配各个值与+到@Search 。%以小数点开始获取所有值。

我看了他们提到,插入数据时它的顺序是基本丧失和选择输出时,应获得一些其他职位。

+0

由于表没有内在的秩序,你是什么意思“另一个表的价值不按顺序” - 你有一列*定义*要应用的顺序? (提示:你需要一个) –

+0

@Damien_The_Unbeliever我有一个通过循环逗号分隔的字符串并插入分隔值创建的表。这是第二个表格的表示。例如。 '2,5,1'变成表2,它决定了表1的顺序。 –

+0

表没有*固有顺序。除非您在插入值时应用附加*编号*,否则您的表格包含3行。无论什么时候查询,它都没有定义什么* order *它将返回那些行,除非你应用了'ORDER BY'子句。你会注意到这两个提供的答案都假设这样的编号已经发生。 –

回答

0
Declare @T1 table (nval money) 
Insert into @T1 values 
(1.1), 
(1.2), 
(2.3), 
(2.1), 
(2.2), 
(5.2), 
(5.3), 
(5.1) 

Declare @T2 table (RowNr int,nval money) -- Make RowNr and Identity(int) 
Insert into @T2 values 
(1,2),(2,5),(3,1) 

Select A.* 
From @T1 A 
Join @T2 B on floor(a.nval)=B.nval 
Order By B.RowNr,A.nval 

返回

nval 
2.10 
2.20 
2.30 
5.10 
5.20 
5.30 
1.10 
1.20 
0

不幸的是你是不是显示你的表格。比方说,他们是这样的:

表数据

 
value 
1.1 
1.2 
2.3 
2.1 
... 

表datasort

 
intvalue displayorder 
2   1 
5   2 
1   3 
... 

通过displayorder第一和值后加入表和顺序:

select 
from data 
join datasort on datasort.intvalue = trunc(data.value) 
order by datasort.displayorder, data.value; 
相关问题